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

Python 在多个条件下删除重复行,python,pandas,Python,Pandas,我有一个重复行的数据帧。有些列有数据,有些列有零。我希望保留包含数据的行,并消除包含零的行,但我还希望在只有零的情况下删除重复的行。这里有一个例子 df = A B x 0 x 1 y 0 y 0 z 1 我希望是这样 A B x 1 y 0 z 1 我正在努力按层次删除重复项;首先保留列值不同于零的非零行,然后删除列值为零的行的重复项 谢谢使用排序\u值和参数保留class='last': df.sort_values(['A','B']).dro

我有一个重复行的数据帧。有些列有数据,有些列有零。我希望保留包含数据的行,并消除包含零的行,但我还希望在只有零的情况下删除重复的行。这里有一个例子

df =

A   B
x   0
x   1
y   0
y   0
z   1
我希望是这样

A   B
x   1
y   0
z   1
我正在努力按层次删除重复项;首先保留列值不同于零的非零行,然后删除列值为零的行的重复项


谢谢

使用
排序\u值
和参数
保留class='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')

使用
sort\u值
和参数
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')

或者您可以使用
groupby

df.groupby('A',as_index=False).B.last()
Out[421]: 
   A  B
0  x  1
1  y  0
2  z  1

或者您可以使用
groupby

df.groupby('A',as_index=False).B.last()
Out[421]: 
   A  B
0  x  1
1  y  0
2  z  1

你试过什么了?。。。请给我们看看代码…我真的卡住了。什么都不试?我们不是来为您编写代码的,而是来帮助您编写代码的…那么您尝试了什么?。。。请给我们看看代码…我真的卡住了。什么都不试?我们不是来为您编写代码的,而是来帮助您编写代码的……出于好奇,这是可行的,但由于我也有负值,所以排序更为复杂。看来我需要按绝对值排序。@Juliannosambati添加了一个处理负数的更新。谢谢。我已经准备创建一个按绝对值排序的新列。看起来不错!出于好奇,这是可行的,但因为我也有负值,所以排序更为复杂。看来我需要按绝对值排序。@Juliannosambati添加了一个处理负数的更新。谢谢。我已经准备创建一个按绝对值排序的新列。看起来不错!