Python 如何基于第一次出现的唯一列值获取行
我有这样一个数据框:Python 如何基于第一次出现的唯一列值获取行,python,pandas,dataframe,Python,Pandas,Dataframe,我有这样一个数据框: df col1 col2 col3 1 A B 1 D R 2 R P 2 D F 3 T G 1 R S 3 R S 我想得到具有前3个唯一值col1的数据帧。如果某个col1值稍后出现在df中,它将忽略 最终的数据帧应如下所示: df col1 col2
df
col1 col2 col3
1 A B
1 D R
2 R P
2 D F
3 T G
1 R S
3 R S
我想得到具有前3个唯一值col1的数据帧。如果某个col1值稍后出现在df中,它将忽略
最终的数据帧应如下所示:
df
col1 col2 col3
1 A B
1 D R
2 R P
2 D F
3 T G
如何在pandas中以最有效的方式执行此操作?使用序列创建助手连续组,然后按以下方式进行筛选:
这里有一个解决方案,它会立即停止,找到前三个不同的值
import pandas as pd
data="""
col1 col2 col3
1 A B
1 D R
2 R P
2 D F
3 T G
1 R S
3 R S
"""
df = pd.read_csv(pd.compat.StringIO(data), sep='\s+')
nbr = 3
dico={}
for index, row in df.iterrows():
dico[row.col1]=True
if len(dico.keys())==nbr:
df = df[0:index+1]
break
print(df)
col1 col2 col3
0 1 A B
1 1 D R
2 2 R P
3 2 D F
4 3 T G
您可以在以下位置使用该方法:
mask1 = df.duplicated(keep = "first") # this line is to get the first occ.
mask2 = df.duplicated(keep = False) # this line is to get the row that occ one single time.
mask = ~mask1 | ~mask2
df[mask]
@jezrael我想保留前三个唯一的col1值,drop_duplicates()不构成ant解决方案,如果它是重复的,请给我链接。这个问题与drop duplicates链接的问题不同。@jezrael我不说执行时间,但找到解决方案的速度很快。。对不起,我说的是英语,因为最后一句话是《熊猫》中最有效的方法是什么?:)
import pandas as pd
data="""
col1 col2 col3
1 A B
1 D R
2 R P
2 D F
3 T G
1 R S
3 R S
"""
df = pd.read_csv(pd.compat.StringIO(data), sep='\s+')
nbr = 3
dico={}
for index, row in df.iterrows():
dico[row.col1]=True
if len(dico.keys())==nbr:
df = df[0:index+1]
break
print(df)
col1 col2 col3
0 1 A B
1 1 D R
2 2 R P
3 2 D F
4 3 T G
mask1 = df.duplicated(keep = "first") # this line is to get the first occ.
mask2 = df.duplicated(keep = False) # this line is to get the row that occ one single time.
mask = ~mask1 | ~mask2
df[mask]