我有一个重复行的数据框。有些列的数据还有零。我想保留带有数据的行并消除那些带有零的行,但我还想在只有零时删除重复项。这是一个例子
df =
A B
x 0
x 1
y 0
y 0
z 1
我希望它是
A B
x 1
y 0
z 1
我正在努力分层次地删除重复项;首先保持列值不为零的非零行,然后删除列值的副本为零的重复行。
谢谢
答案 0 :(得分:3)
使用sort_values
和参数keep='last'
:
df.sort_values(['A','B']).drop_duplicates(subset='A', keep='last')
输出:
A B
1 x 1
3 y 0
4 z 1
更新负值:
df.assign(sortkey = df.B.ne(0))
.sort_values(['A','sortkey'])
.drop_duplicates(subset='A', keep='last')
答案 1 :(得分:1)
或许您可以使用groupby
df.groupby('A',as_index=False).B.last()
Out[421]:
A B
0 x 1
1 y 0
2 z 1