熊猫-按工作日过滤数据

时间:2018-12-11 18:33:52

标签: 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'))

现在我正尝试将df中的日期与工作日中的值进行比较,如下所示:

df_final = df[df['date'].isin(weekday)]

但是上面没有返回任何行。

2 个答案:

答案 0 :(得分:3)

在创建工作日时应删除pd.DataFrame,因为当我们将SeriesDataFrameisin一起使用时,意味着我们不仅匹配values,而且匹配{ {1}}和index,因为原始的columnsindex可能与工作日新创建的数据框不同,所以这就是为什么要返回columns

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

答案 1 :(得分:2)

使用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()

可以找到其他rule重采样值here