【问题标题】:Loop over multiple columns in dataframe循环数据框中的多列
【发布时间】:2026-01-12 16:10:02
【问题描述】:

我有一个来自 CSV 文件的数据框,该文件有 61 列和 100 万行。其中 25 列 (Flag_1, Flag_2, ..., Flag_25)True/False 作为数据帧每一行的值。

我正在尝试做的是遍历每一列以确定这些列中的整行是否为真,我只需要至少一个真。如果有 True 则新列 Flag_All 将为该行具有 True 值,如果没有,则 False。

我可以像这样对单个列使用 for 循环,

for index, x in data2['FLAG_1'].iteritems() :
    data2['FLAG_ALL'] =  data2['FLAG_1'] == True

但无法确定多列。

【问题讨论】:

    标签: python pandas for-loop dataframe


    【解决方案1】:

    请尝试:

    data2['FLAG_ALL'] = data2.any(axis=1,bool_only=True).values 
    

    更多关于any()的信息http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.any.html

    【讨论】:

    • 这很好用,但我想知道,如果我有其他“标志”,这不会在这些列中选择“真”吗?我如何将其限制为仅从 FLAG_1 到 FLAG_25 列?
    • 找出它的列元素。感谢您的帮助。
    【解决方案2】:

    给定一个示例数据框:

    df = pd.DataFrame({
        'flag_1': [False, False, True],
        'flag_2': [False, False, False],
        'flag_3': [True, False, False]})
    

    您可以使用df.filter 获取适当的列(以标志、下划线和数字开头的列...),然后在行轴上应用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
    

    【讨论】: