为了账号安全,请及时绑定邮箱和手机立即绑定

如何在pandas中选择可变列数匹配的行?

如何在pandas中选择可变列数匹配的行?

ibeautiful 2021-06-01 20:21:08
所以我有一个 Pandas 数据框,其中列数是可变的。我只想保留那些列的子集匹配的行。一个例子:Name, Surname, Class1, Class2, Class3John  Smith       1       1      -1   Ned   Walker     -1      -1      -1Walter White      1       1       1从这个数据框中,我只想留下 Class1、Class2 和 Class3 匹配的行,因此输出将是:Name, Surname, Class1, Class2, Class3Ned   Walker     -1      -1      -1Walter White      1       1       1但是,有时“类”列的数量从 1 到 4 不等,因此我可以获得这样的数据框:Name, Surname, Class1, Class2John  Smith       1       1Ned   Walker     -1      -1Walter White      1       1我只希望 Class1 和 Class2 匹配。或这个:Name, Surname, Class1, Class2, Class3, Class4John  Smith       1       1      -1      1Ned   Walker     -1      -1      -1      1Walter White      1       1       1      1从 1 到 4 的所有类都需要具有相同的值。什么是一种有效的方法来做到这一点?
查看完整描述

2 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

Zero 的回答.nunique(axis=1).eq(1)显然是最熊猫式的方法,但为了将来参考,这也有效:


import pandas as pd

import numpy as np


np.random.seed(seed=42)

df = pd.DataFrame(np.random.randint(0,2,size=(10,3)))

print(df)

print('\n')

print(df.loc[np.all([df[col] == df.iloc[:,0] for col in df],axis=0)])

如果您发现自己需要检查例如特定值(只需将其替换为df.iloc[:,0]您想要的任何值)或其他逻辑条件,这可能会很有用。


查看完整回答
反对 回复 2021-06-09
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

使用filter和nunique


In [808]: df[df.filter(like='Class').nunique(1).eq(1)]

Out[808]:

     Name Surname  Class1  Class2  Class3  Class4

2  Walter   White       1       1       1       1

细节


In [809]: df

Out[809]:

     Name Surname  Class1  Class2  Class3  Class4

0    John   Smith       1       1      -1       1

1     Ned  Walker      -1      -1      -1       1

2  Walter   White       1       1       1       1


In [810]: df.filter(like='Class')

Out[810]:

   Class1  Class2  Class3  Class4

0       1       1      -1       1

1      -1      -1      -1       1

2       1       1       1       1


In [811]: df.filter(like='Class').nunique(1)

Out[811]:

0    2

1    2

2    1

dtype: int64


In [812]: df.filter(like='Class').nunique(1).eq(1)

Out[812]:

0    False

1    False

2     True

dtype: bool


查看完整回答
反对 回复 2021-06-09
  • 2 回答
  • 0 关注
  • 130 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信