Pandas 熊猫-按工作日筛选数据
我有一个数据框,其中列出了每一天的销售计数,如下所示:Pandas 熊猫-按工作日筛选数据,pandas,Pandas,我有一个数据框,其中列出了每一天的销售计数,如下所示: date,count 11/1/2018,345 11/2/2018,100 11/5/2018,432 11/7/2018,500 11/11/2018,555 11/17/2018,754 我正在检查所有的销售,有多少是在一个工作日完成。为了在11月抽出所有的工作日,我做了以下工作: weekday = pd.DataFrame(pd.bdate_range('2018-11-01', '2018-11-30')) 现在,我尝试将d
date,count
11/1/2018,345
11/2/2018,100
11/5/2018,432
11/7/2018,500
11/11/2018,555
11/17/2018,754
我正在检查所有的销售,有多少是在一个工作日完成。为了在11月抽出所有的工作日,我做了以下工作:
weekday = pd.DataFrame(pd.bdate_range('2018-11-01', '2018-11-30'))
现在,我尝试将df中的日期与工作日中的值进行比较,如下所示:
df_final = df[df['date'].isin(weekday)]
但是上面没有返回任何行。您应该在创建工作日时删除pd.DataFrame,因为当我们使用
系列
和数据框
与isin
一起使用时,意味着我们不仅要匹配值
,还要匹配索引和列
,由于原始的索引
和列
可能与新创建的数据帧工作日不同,因此返回False
df.date=pd.to_datetime(df.date)
weekday = pd.bdate_range('2018-11-01', '2018-11-30')
df_final = df[df['date'].isin(weekday)]
df_final
Out[39]:
date count
0 2018-11-01 345
1 2018-11-02 100
2 2018-11-05 432
3 2018-11-07 500
这个简单的例子解决了我上面提到的问题
df=pd.DataFrame({'A':[1,2,3,4,5]})
newdf=pd.DataFrame({'B':[2,3]})
df.isin(newdf)
Out[43]:
A
0 False
1 False
2 False
3 False
4 False
df.isin(newdf.B.tolist())
Out[44]:
A
0 False
1 True
2 True
3 False
4 False
使用DatetimeIndex
并让pandas
为您完成以下工作:
# generate some sample sales data for the month of November
df = pd.DataFrame(
{'count': np.random.randint(0, 900, 30)},
index=pd.date_range('2018-11-01', '2018-11-30', name='date')
)
# resample by business day and call `.asfreq()` on the resulting groupby-like object to get your desired filtering
df.resample(rule='B').asfreq()
可以找到重采样规则的其他值