我有一个包含大量列的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)
答案 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)