使用条件从熊猫数据框过滤

时间:2020-07-12 15:02:03

标签: python pandas dataframe conditional-statements

在过滤此熊猫数据框时遇到以下问题:

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个月。我在做什么错?我需要用月和年创建一个新列吗?

4 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

这里的逻辑有点偏离

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 :(得分:0)

对于月份部分,您不包括所有月份=7。我认为将其更改为df1['MONTH'] == 7即可满足您的要求。

答案 3 :(得分:0)

这里是您可以使用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