假设我在Pandas中有一个数据框,描述了在一段时间内在不同商店生产的水果的销售情况:
Time_of_sale Product Store
05.01.2018 15:37 Apple 1
05.01.2018 13:58 Apple 1
05.01.2018 15:36 Banana 2
05.01.2018 15:33 Banana 3
15.08.2017 19:08 Strawberry 4
15.08.2017 19:04 Blueberry 4
03.09.2017 15:32 Pere 5
03.09.2017 15:31 Pere 6
05.01.2018 15:32 Blueberry 7
05.01.2018 15:27 Banana 2
08.01.2018 09:31 Grapes 1
我想要添加到每一行,基本上是此商店中在一个时间窗口内(例如3小时)内销售的此产品的销售量。
例如在第一行:
因此,结果应该添加一个新列(因此不进行下采样)。
Time_of_sale Product Store Sales_in_TF
05.01.2018 15:37 Apple 1 2
05.01.2018 13:58 Apple 1 2
05.01.2018 15:36 Banana 2 2
05.01.2018 15:33 Banana 3 1
15.08.2017 19:08 Strawberry 4 1
15.08.2017 19:04 Blueberry 4 1
03.09.2017 15:32 Pere 5 1
03.09.2017 15:31 Pere 6 1
05.01.2018 15:32 Blueberry 7 1
05.01.2018 15:27 Banana 2 2
08.01.2018 09:31 Grapes 1 1
我正在调查
series.resample('3H', label='right').count()
以及
df.groupby(pd.Grouper(freq='3H', closed='left'))
但我真的找不到我要找的东西 也许你们有个主意?
答案 0 :(得分:0)
我创建了一个虚拟变量的所有1
s,因此它会计算出来。
df['Amount'] = 1
groups = df.groupby((
pd.Grouper(key='Time_of_sale', freq='6H'),
'Product',
'Store'
))
groups.count()
结果:
Amount
Time_of_sale Product Store
2017-03-09 12:00:00 Pere 5 1
6 1
2017-08-15 18:00:00 Blueberry 4 1
Strawberry 4 1
2018-05-01 12:00:00 Apple 1 2
Banana 2 2
3 1
Blueberry 7 1
2018-08-01 06:00:00 Grapes 1 1
编辑:哎呀没看到你想要下采样。这不是很优雅,但你可以这样做:
dfs = []
for i, group in df.groupby((pd.Grouper(key='Time_of_sale', freq='6H'), 'Product', 'Store')):
group['Amount'] = group.shape[0]
dfs.append(group)
pd.concat(dfs)
哪个没有下采样。</ p>
Time_of_sale Product Store Amount
2017-03-09 15:32:00 Pere 5 1
2017-03-09 15:31:00 Pere 6 1
2017-08-15 19:04:00 Blueberry 4 1
2017-08-15 19:08:00 Strawberry 4 1
2018-05-01 15:37:00 Apple 1 2
2018-05-01 13:58:00 Apple 1 2
2018-05-01 15:36:00 Banana 2 2
2018-05-01 15:27:00 Banana 2 2
2018-05-01 15:33:00 Banana 3 1
2018-05-01 15:32:00 Blueberry 7 1
2018-08-01 09:31:00 Grapes 1 1