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