【问题标题】:Filtering from a Pandas dataframe using conditions [closed]使用条件从 Pandas 数据帧中过滤 [关闭]
【发布时间】:2020-11-01 20:54:26
【问题描述】:

我在过滤此 pandas 数据框时遇到以下问题:

import pandas as pd

>>> df1 = pd.DataFrame({'YEAR': [2020,2020,2019,2019, 2019,2020, 2020],'MONTH': [7,6,6,7, 2, 1, 2],'WEEK': [2,2,3,3, 2, 1, 2],'SALES': [45357, 30000, 2858, 10500, 3321, 23434, 2233]})
>>>
>>>
>>>
>>> df1
   YEAR  MONTH  WEEK  SALES
0  2020      7     2  45357
1  2020      6     2  30000
2  2019      6     3   2858
3  2019      7     3  10500
4  2019      2     2   3321
5  2020      1     1  23434
6  2020      2     2   2233
>>>

我正在使用此代码过滤数据框:

df1[(df1['YEAR'] != 2020) & (df1['MONTH'] != 7)]

我想删除年份为 2020 年和第 7 个月的行,但是这段代码给了我一个包含 2019 年和第 6 个月和第 2 个月的数据框。我做错了什么?我需要创建一个包含月份和年份的新列吗?

【问题讨论】:

  • 这与R没有任何关系,所以请不要标记它。此外,您的问题标题无需全部大写
  • 无论如何,您的代码不能只留下月份8,因为它甚至不存在于您的数据集中
  • 这是你想要的吗? df1.query("YEAR!=2020 | MONTH!=7")?
  • 对不起大写和标记 R @roganjosh ,我仍然在这里学习。
  • @NelsonGon 我不想使用查询,但另一个用户回答了我想要的,谢谢!

标签: python pandas dataframe conditional-statements


【解决方案1】:

这里的逻辑有点不对劲

df1[~((df1['YEAR'] == 2020) & (df1['MONTH'] == 7))]
   YEAR  MONTH  WEEK  SALES
1  2020      6     2  30000
2  2019      6     3   2858
3  2019      7     3  10500
4  2019      2     2   3321
5  2020      1     1  23434
6  2020      2     2   2233

或者把&改成|

df1[(df1['YEAR'] != 2020) | (df1['MONTH'] != 7)]
   YEAR  MONTH  WEEK  SALES
1  2020      6     2  30000
2  2019      6     3   2858
3  2019      7     3  10500
4  2019      2     2   3321
5  2020      1     1  23434
6  2020      2     2   2233

【讨论】:

    【解决方案2】:

    对于您排除所有月份 = 7 的月份部分。我认为将其更改为 df1['MONTH'] == 7 会满足您的需求。

    【讨论】:

      【解决方案3】:

      要删除year=2020month=7,您可以执行以下操作:

      df1 = df1[~((df1['YEAR'] == 2020) & (df1['MONTH'] == 7))]
      

      df1 = df1[(df1['YEAR'] != 2020) | (df1['MONTH'] != 7)]
      

      【讨论】:

        【解决方案4】:

        这是您可以使用loc的一种方式:

        import pandas as pd
        
        df1 = pd.DataFrame({'YEAR': [2020,2020,2019,2019, 2019,2020, 2020],
                            'MONTH': [7,6,6,7, 2, 1, 2],
                            'WEEK': [2,2,3,3, 2, 1, 2],
                            'SALES': [45357, 30000, 2858, 10500, 3321, 23434, 2233]})
        
        print(df1.loc[(df1['YEAR']!=2020)|(df1['MONTH']!=7)])
        

        输出:

           YEAR  MONTH  WEEK  SALES
        1  2020      6     2  30000
        2  2019      6     3   2858
        3  2019      7     3  10500
        4  2019      2     2   3321
        5  2020      1     1  23434
        6  2020      2     2   2233
        

        【讨论】:

          猜你喜欢
          • 2019-08-17
          • 1970-01-01
          • 2017-03-08
          • 2019-01-02
          • 2016-08-20
          • 1970-01-01
          • 2022-11-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多