pandas Dataframe根据多个特性添加业务天数

dy1byipe  于 2022-12-09  发布在  其他
关注(0)|答案(1)|浏览(104)

我有一个相当大的数据框架,其中包含不同的产品、位置sold_value和相应的日期。我想以这样的方式操作DF,即每个产品在其相应的位置根据业务日频率获得日期值。作为下一步,如果在同一日期销售,我想要sold_value(仍然根据产品及其位置)彼此相加。这样基本上每个产品及其相应的位置都有一个business day freq和sold_value。
我已经尝试了多种方法,一开始我只是用groupby绑定来操作DF......接下来,我尝试为每个产品创建新的 Dataframe ,并根据其相应的位置添加bday frq和.sum,然后根据日期合并所有DF,但它不太起作用。
作为一个附带的事实,有数百个地点和产品,所以我不能硬编码他们的值
PS.:感谢帮助
DF:
| 积|位置|日期|价值|
| - -|- -|- -|- -|
| 一个|一个|2022年1月1日|一个|
| 一个|一个|2022年1月4日|一个|
| 一个|2个|2022年1月1日|五个|
| 2个|一个|2022年1月1日|四个|
| 2个|一个|2022年1月1日|三个|
| 2个|2个|2022年1月1日|一个|
我想要的输出:
| 积|位置|日期|价值|
| - -|- -|- -|- -|
| 一个|一个|2022年1月1日|一个|
| 一个|一个|2022年1月2日|第0页|
| 一个|一个|2022年1月3日|第0页|
| 一个|一个|2022年1月4日|一个|
| 一个|2个|2022年1月1日|五个|
| 2个|一个|2022年1月1日|七个|
| 2个|2个|2022年1月1日|一个|

kyvafyod

kyvafyod1#

value的第一个聚合sum

df['date'] = pd.to_datetime(df['date'], dayfirst=True)

df = df.groupby(['ct','location','date'], as_index=False)['value'].sum()
print (df)
   ct  location       date  value
0   1         1 2022-01-01      1
1   1         1 2022-01-04      1
2   1         2 2022-01-01      5
3   2         1 2022-01-01      7
4   2         2 2022-01-01      1

然后在lambda函数Series.asfreq中添加0 days per days:

f = lambda x: x.asfreq('D', fill_value=0)
df1 = df.set_index('date').groupby(['ct','location'])['value'].apply(f).reset_index()
print (df1)
   ct  location       date  value
0   1         1 2022-01-01      1
1   1         1 2022-01-02      0
2   1         1 2022-01-03      0
3   1         1 2022-01-04      1
4   1         2 2022-01-01      5
5   2         1 2022-01-01      7
6   2         2 2022-01-01      1

如果希望使用不同的工作日输出:

f = lambda x: x.asfreq('B', fill_value=0)
df2 = df.set_index('date').groupby(['ct','location'])['value'].apply(f).reset_index()
print (df2)
   ct  location       date  value
0   1         1 2022-01-03      0
1   1         1 2022-01-04      1

相关问题