我有一个数据框,其中包含日期列表以及每天的销售数量,如下所示:
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)]
但是上面没有返回任何行。
答案 0 :(得分:3)
在创建工作日时应删除pd.DataFrame,因为当我们将Series
和DataFrame
与isin
一起使用时,意味着我们不仅匹配values
,而且匹配{ {1}}和index
,因为原始的columns
和index
可能与工作日新创建的数据框不同,所以这就是为什么要返回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