在过滤此熊猫数据框时遇到以下问题:
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个月。我在做什么错?我需要用月和年创建一个新列吗?
答案 0 :(得分:1)
要删除year=2020
和month=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