在多个条件下删除重复的行

时间:2018-02-12 18:42:41

标签: python pandas

我有一个重复行的数据框。有些列的数据还有零。我想保留带有数据的行并消除那些带有零的行,但我还想在只有零时删除重复项。这是一个例子

df =

A   B
x   0
x   1
y   0
y   0
z   1

我希望它是

A   B
x   1
y   0
z   1

我正在努力分层次地删除重复项;首先保持列值不为零的非零行,然后删除列值的副本为零的重复行。

谢谢

2 个答案:

答案 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