【问题标题】:Filtering for multiple df columns where any of column or none are = value过滤多个 df 列,其中任何列或无列 = 值
【发布时间】:2020-09-09 05:13:27
【问题描述】:

我的df如下:

ID | Night_Shift | Day_Shift | Weekend_Shift | Morning_Shift
3       True         False         False          True
1       False        False         False          False
2       True         True          False          True 

如果任何 Shift 列中至少有 1 个 True 或 False 如果全部为 False,我如何创建新列显示 True?

预期输出:

ID | Night_Shift | Day_Shift | Weekend_Shift | Morning_Shift | New_Col
    3       True         False         True          True        True
    1       False        False         False          False       False
    2       True         False         False          False       True

谢谢

【问题讨论】:

    标签: python python-3.x pandas


    【解决方案1】:

    检查any

    df['New'] = df.drop('ID', axis = 1).any(axis = 1)
    

    更新

    df['New'] = df.loc[:,df.columns.str.endswith('_Shift')].any(1)
    

    【讨论】:

    • 我的df中除了ID之外还有多个其他列我只在样本集中显示了ID,是否有不同的方法?你同意其他答案吗?
    • @Chris90 我仍然认为任何一个都更好
    • 只需使用或“|”所有列之间的运算符。像 df['New_Col'] = df['Night_Shift'] | df['Day_Shift'] | df['Weekend_Shift'] | df['Morning_Shift']
    【解决方案2】:
    import pandas as pd
    data = {'col_1': [True, True, False, False], 'col_2': [True, False, True, False]}
    df = pd.DataFrame.from_dict(data)
    df['result'] = df['col_1'] | df['col_2']
    print (df)
    

    在您的代码中

    df['New_Col'] = df['Night_Shift'] | df['Day_Shift'] | df['Weekend_Shift'] | df['Morning_Shift'] 
    

    【讨论】:

    • 这也为所有 False 提供 False?
    • 你的数据和我的不同
    猜你喜欢
    • 1970-01-01
    • 2020-10-28
    • 2021-09-07
    • 2021-11-02
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多