我有一个CSV文件的数据框,该文件有61列和1mil行。这些列中的25列(Flag_1, Flag_2, ..., Flag_25)
具有True/False
作为数据帧的每一行的值。
我尝试做的是遍历每一列以确定这些列中的整行是否存在True,我只需要至少一个为true。如果有一个True然后是一个新列,Flag_All
将为该行设置True值,否则为False。
我可以将for循环用于单个列,如此,
for index, x in data2['FLAG_1'].iteritems() :
data2['FLAG_ALL'] = data2['FLAG_1'] == True
但无法找出多列。
答案 0 :(得分:4)
给出一个示例数据框:
df = pd.DataFrame({
'flag_1': [False, False, True],
'flag_2': [False, False, False],
'flag_3': [True, False, False]})
您可以使用df.filter
获取相应的列(以flag开头,下划线然后是数字......),然后在行轴上应用any()
以获取整个布尔列:
df['flag_all'] = df.filter(regex='^flag_\d+$').any(axis=1)
这给了你:
flag_1 flag_2 flag_3 flag_all
0 False False True True
1 False False False False
2 True False False True
答案 1 :(得分:0)
请尝试:
data2['FLAG_ALL'] = data2.any(axis=1,bool_only=True).values
任意() http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.any.html
的更多信息