Python Pandas groupby获取行与条件匹配的组的第一个元素
我有一个dataframe,其中有些行除了一列之外具有所有相同的值。我希望删除重复的行,只保留该列中值为1的每个组中的第一行,或者如果该列中没有值为1,则保留一个任意行。示例数据:Python Pandas groupby获取行与条件匹配的组的第一个元素,python,pandas,group-by,aggregate,Python,Pandas,Group By,Aggregate,我有一个dataframe,其中有些行除了一列之外具有所有相同的值。我希望删除重复的行,只保留该列中值为1的每个组中的第一行,或者如果该列中没有值为1,则保留一个任意行。示例数据: df = pd.DataFrame({'a': [1, 1, 1, 2, 2, 3, 3], 'b': [0, 1, 2, 3, 4, 5, 6], 'c': [0, 1, 0, 0, 0, 1, 1]}) 我想要的输出是这样的 df.g
df = pd.DataFrame({'a': [1, 1, 1, 2, 2, 3, 3],
'b': [0, 1, 2, 3, 4, 5, 6],
'c': [0, 1, 0, 0, 0, 1, 1]})
我想要的输出是这样的
df.groupby(['a']).first_where(lambda row: row['c'] == 1).reset_index()
a b c
0 1 1 1
1 2 4 0
2 3 5 1
您可以使用
删除重复项
df.sort_values(['a','c']).drop_duplicates(['a'],keep='last')
Out[748]:
a b c
1 1 1 1
4 2 4 0
6 3 6 1
如果要使用groupby
df.sort_values(['a','c']).groupby('a',as_index=False).last()
Out[750]:
a b c
0 1 1 1
1 2 4 0
2 3 6 1
您可以先按条件进行筛选,然后执行groupby:
df[df['c'] == 1].groupby('a').head(1)
如果数据帧被任意排序,是否可以恢复其原始排序顺序?@BallpointBen是的,那么您可以查看op1,您可以对索引进行排序,索引不改变,最后使用sort_index()进行排序