根据列表中列的值过滤 Pandas 数据框列

Chi*_*ose 4 python dataframe pandas

我有一个数据框 df 定义如下:

df = pd.DataFrame()
df["A"] = ['True','True','True','True','True']
df["B"] = ['True','False','True','False','True']
df["C"] = ['False','True','False','True','False']
df["D"] = ['True','True','False','False','False']
df["E"] = ['False','True','True','False','True']
df["F"] = ['HI','HI','HI','HI','HI']
Run Code Online (Sandbox Code Playgroud)
>> df

      A      B      C      D      E   F
0  True   True  False   True  False  HI
1  True  False   True   True   True  HI
2  True   True  False  False   True  HI
3  True  False   True  False  False  HI
4  True   True  False  False   True  HI
Run Code Online (Sandbox Code Playgroud)

和一个清单

lst = ["A","C"]
Run Code Online (Sandbox Code Playgroud)

我想根据 .df 中'True'列的值过滤 df 中的行lst。也就是说,我想得到我的结果数据帧:

      A      B     C      D      E   F
1  True  False  True   True   True  HI
3  True  False  True  False  False  HI
Run Code Online (Sandbox Code Playgroud)

除了遍历列表中的列名并对其进行过滤之外,还有更好的解决方案吗?

Erf*_*fan 5

使用DatFrame.all在柱轴(axis=1):

df[df[lst].all(axis=1)]

      A      B     C      D      E   F
1  True  False  True   True   True  HI
3  True  False  True  False  False  HI
Run Code Online (Sandbox Code Playgroud)

细节:

我们使用 获取范围内的列df[lst],然后我们all用来检查哪些行的“全部”为True

df[lst].all(axis=1)

0    False
1     True
2    False
3     True
4    False
dtype: bool
Run Code Online (Sandbox Code Playgroud)

  • 不错,我的脑子直接想到了“df[df[lst].sum(1).eq(len(lst))]”,但这更惯用和Pythonic (2认同)