Python Pandas groupby获取行与条件匹配的组的第一个元素

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

我有一个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.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()进行排序