【问题标题】:How to apply condtion on two columns in pandas如何在熊猫的两列上应用条件
【发布时间】:2021-05-20 04:31:23
【问题描述】:

我有一个如下所示的 pandas 数据框 (df)。

       value        date    count1  hours   column_name
 0      eps     2021-02-17  127185   0       EPS
 1      eps     2021-02-17  129792   1       EPS
 2      eps     2021-02-17  155645   2       EPS
 3      eps     2021-02-17  160214   4       EPS
 4      eps     2021-02-17  164315   5       EPS
 5      eps     2021-02-16  164987   1       EPS

我想要新的数据框,它不包含日期为 2021-02-17 且小时数 = 1 的记录。 对于这些我尝试这些

     df.loc[(df['date1']<='2021-02-17') & (df['hours']!= 1)]

它给出如下输出:-

       value        date    count1  hours   column_name
 0      eps     2021-02-17  127185   0       EPS
 1      eps     2021-02-17  155645   2       EPS
 2      eps     2021-02-17  160214   4       EPS
 3      eps     2021-02-17  164315   5       EPS

但我想像下面这样:-

       value        date    count1  hours   column_name
 0      eps     2021-02-17  127185   0       EPS
 1      eps     2021-02-17  155645   2       EPS
 2      eps     2021-02-17  160214   4       EPS
 3      eps     2021-02-17  164315   5       EPS
 4      eps     2021-02-16  164987   1       EPS

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您需要使用运算符| 而不是&amp;

    import pandas as pd
    
    #if needed you can change your 'date' to datetime
    df['date'] = pd.to_datetime(df['date'])
    
    out = df.loc[(df['date']!='2021-02-17') | (df['hours']!=1)]
    
      value       date  count1  hours column_name
    0   eps 2021-02-17  127185      0         EPS
    1   eps 2021-02-17  129792      1         EPS
    2   eps 2021-02-17  155645      2         EPS
    3   eps 2021-02-17  160214      4         EPS
    4   eps 2021-02-17  164315      5         EPS
    5   eps 2021-02-16  164987      1         EPS
    

    【讨论】:

    • 请注意,如果您决定使用 out 进行其他操作,这可能会导致设置带有复制警告。最好使用loc 或制作一个 express copy()
    • 感谢您的提示。请在您认为需要时继续提供反馈。绝对值得赞赏。
    • 注意I have not downvoted in any way,这是正确答案
    • 即使你这样做也没关系,只要它与反馈相关联。
    • 转换为日期时间格式需要太多时间我有 20 亿条记录的数据框。
    【解决方案2】:

    比较两者是否不等于!=,将| 更改为按位OR 以及正确的输出需要日期时间:

    df['date'] = pd.to_datetime(df['date'])
    df =  df.loc[(df['date'] != '2021-02-17') | (df['hours'] != 1)]
    print (df)
      value       date  count1  hours column_name
    0   eps 2021-02-17  127185      0         EPS
    2   eps 2021-02-17  155645      2         EPS
    3   eps 2021-02-17  160214      4         EPS
    4   eps 2021-02-17  164315      5         EPS
    5   eps 2021-02-16  164987      1         EPS
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-26
      • 2020-02-10
      • 1970-01-01
      • 2017-10-17
      • 2022-01-15
      • 1970-01-01
      • 2021-02-22
      • 2023-02-20
      相关资源
      最近更新 更多