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()
可以找到重采样
规则的其他值