Python Pandas:测试DataFrame的任何列是否满足条件

时间:2018-04-04 13:33:20

标签: python pandas dataframe

我有一个包含大量列的DataFrame。现在我有条件测试其中一些列,如果任何列集不同于零。代码看起来很难看,我想知道是否有更优雅的方法将该条件应用于列的子集?我目前的代码是:

df['indicator'] = (
    (df['col_1'] != 0) | 
    (df['col_2'] != 0) | 
    (df['col_3'] != 0) | 
    (df['col_4'] != 0) | 
    (df['col_5'] != 0)
)

我正在寻找像这样的伪代码:

columns = ['col_1', 'col_1', 'col_2', 'col_3', 'col_4', 'col_5']
df['indicator'] = df.any(columns, lambda value: value != 0)

3 个答案:

答案 0 :(得分:6)

ne!=的方法形式。我使用它,以便流水线any看起来更好。我使用any(axis=1)来查找连续是否为真。

df['indicator'] = df[columns].ne(0).any(axis=1)

答案 1 :(得分:2)

在这种特殊情况下,您还可以检查相应列的总和!=0

df['indicator'] = df[columns].prod(axis=1).ne(0)

PS @ piRSquared的解决方案更通用......

答案 2 :(得分:2)

也许使用min

df['indicator']=(df[columns]!=0).min(axis=1).astype(bool)