Pandas groupby获得第一行符合行匹配条件的组

时间:2018-02-13 18:47:34

标签: python pandas group-by aggregate

我有一个数据框,其中一些行具有除一列之外的所有相同值。我希望删除重复的行,只保留每个组中该列中的值为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

2 个答案:

答案 0 :(得分:2)

您可以使用drop_duplicates

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

答案 1 :(得分:0)

您可以先按照条件进行过滤,然后执行groupby:

df[df['c'] == 1].groupby('a').head(1)