如何删除Pandas Dataframe 中不同列中具有相同值的行?

yk9xbfzb  于 2023-06-28  发布在  其他
关注(0)|答案(2)|浏览(94)

我有一个dataframe,看起来像这样:
| 项目|记事本|圆珠笔|铅笔|橡皮擦|铅笔刀|订书机|纸|剪刀|胶|
| - -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----|
| 图片1|一个|0|一个|一个|0| 0| 0| 0| 0|
| 图片2| 0|一个|0| 0| 0| 0|一个|0| 0|
| 图片3| 0| 0| 0| 0|一个|0| 0| 0| 0|
| 图片4| 0| 0| 0| 0| 0|一个|0| 0| 0|
| 图片5| 0| 0| 0| 0| 0| 0| 0|一个|0|
我想删除在不同列中有多个1的行,所以它变成这样:
| 项目|记事本|圆珠笔|铅笔|橡皮擦|铅笔刀|订书机|纸|剪刀|胶|
| - -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----|- -----|
| 图片3| 0| 0| 0| 0|一个|0| 0| 0| 0|
| 图片4| 0| 0| 0| 0| 0|一个|0| 0| 0|
| 图片5| 0| 0| 0| 0| 0| 0| 0|一个|0|

gblwokeq

gblwokeq1#

使用numpy mask:

df[np.sum(df.values[:,1:]) < 2]

应该比基于pandas的计算更快。

vqlkdk9b

vqlkdk9b2#

您可以使用布尔索引,匹配或值的sum(如果只有0/1)作为引用:

out = df[df.drop(columns='Items').sum(axis=1).lt(2)]

或者:

out = df[df.eq(1).sum(axis=1).lt(2)]

输出:

Items  notebook  ballpoint  pencil  eraser  pencil.1  sharpener  stapler  paper  scissors  glue
2  image3         0          0       0       0         1          0        0      0         0   NaN
3  image4         0          0       0       0         0          1        0      0         0   NaN
4  image5         0          0       0       0         0          0        0      1         0   NaN

中间分度系列:

df.drop(columns='Items').sum(axis=1).lt(2)
# or
# df.eq(1).sum(axis=1).lt(2)

0    False
1    False
2     True
3     True
4     True
dtype: bool

相关问题