首页 > 解决方案 > 过滤不在列表中的熊猫数据框列名

问题描述

我有以下数据框:

df = pd.DataFrame(
{'a': [-0.558, -0.5584, -0.5583, -0.5583, -0.5581], 
 'b': [0.5324, 0.5324, 0.5324, 0.5324, 0.5323], 
 'c': [-0.2803, -0.2803, 0.2803, -0.2803, -0.2851],
 'd': [0.2359, 0.6532, 0.1254, 0.1231, 0.1785]})

    a        b       c      d
0   -0.5580 0.5324  -0.2803 0.2359
1   -0.5584 0.5324  -0.2803 0.6532
2   -0.5583 0.5324  -0.2803 0.1254
3   -0.5583 0.5324  -0.2803 0.1231
4   -0.5581 0.5323  -0.2851 0.1785

我想创建两个具有列名的列表,其中一个列表包含具有负值的列名,另一个包含具有正值的列名。

negative = df.columns[(df < 0).any()]

我正在努力获得类似的东西:

positive = df.columns NOT IN NEGATIVE

此代码返回错误:

list(df[[column for column in df.columns if column != negative]])

>>> ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

任何建议都非常感谢!谢谢!

标签: pythondataframe

解决方案


您可以使用布尔索引:

mask = (df < 0).all()

negative = df.columns[mask].tolist()
not_in_negative = df.columns[~mask].tolist()

print(negative)
print(not_in_negative)

印刷:

['a', 'c']
['b', 'd']

推荐阅读