【发布时间】:2021-04-07 19:31:09
【问题描述】:
我有一个包含 80 列的数据框。其中,有大约 45 列我需要检查“全零”值过滤器。如果对于一行,所有这 45 列的值都为零,则该行被标记为 True。否则为 False。
以下是此问题的示例数据框:
df = pd.DataFrame({'col1': [101,102,103,104,105,106,107,108,109,110,111],
'col2': ['A','B','A','A','A','B','B','A','A','B','B'],
'col3': [12e10,23e10,34e10,0,56e10,67e10,78e10,89e10,0,12e10,23e10],
'col4': ['F','F','F','E','E','E','E','E','F','F','F'],
'col5': [12e10,0,34e10,45e10,0,67e10,78e10,0,0,12e10,23e10],
'col6': [12e10,0,34e10,0,0,67e10,78e10,0,0,12e10,23e10],
'col7': [12e10,0,34e10,45e10,0,67e10,0,0,0,12e10,23e10],
'col8': [12e10,0,34e10,45e10,0,67e10,78e10,0,0,12e10,23e10],
'col9': [12e10,0,34e10,45e10,0,67e10,78e10,0,0,12e10,23e10],
'col10': [12e10,0,0,45e10,0,67e10,78e10,0,0,12e10,23e10],
'col11': [12e10,0,34e10,45e10,0,67e10,78e10,0,0,12e10,23e10],
'col12': [12e10,0,34e10,0,0,67e10,78e10,0,0,12e10,23e10],
'col13': [12e10,0,34e10,45e10,0,67e10,78e10,0,0,12e10,23e10],
'col14': [12e10,0,34e10,45e10,0,67e10,0,0,0,12e10,23e10],
'col15': [12e10,0,34e10,45e10,0,67e10,78e10,0,0,12e10,23e10],
'col16': [12e10,0,34e10,45e10,0,67e10,78e10,0,0,12e10,0],
'col17': [12e10,0,34e10,45e10,0,67e10,78e10,0,0,0,0],
'col18': [12e10,0,34e10,45e10,0,67e10,78e10,0,0,12e10,23e10],
'col19': [12e10,0,34e10,0,0,67e10,78e10,0,0,12e10,23e10],
'col20': [12e10,0,0,45e10,0,67e10,78e10,0,0,12e10,23e10],
})
现在,在此示例中,我需要检查从 col5 到 col19 的所有列的条件。 col3 和 col20 被排除在外。并且所有其他分类列也被排除在外。
我这样做是为了过滤掉那些行。
df[(df[col5] == 0) & (df[col6] == 0) & (df[col7] == 0) & ... & (df[col19] == 0)]
这将得到行(col1:102,105,108,109),因为它们的 col5 到 col19 都为零。 现在我需要为这些行在新列 df['mark'] 中放入 True,而在其余行中放入 False。
但我相信必须有一些简单的方法来做到这一点?
【问题讨论】:
标签: python-3.x pandas dataframe filter