我有一个有三列的交易数据帧,我按照类型和日期进行了排序,看起来像:
type date price
A 2020-05-01 4
A 2020-06-04 6
A 2020-06-08 8
A 2020-07-03 5
B 2020-02-01 3
B 2020-04-02 4
有很多类型(A、B、C、D、E…(,我想计算同一类型产品的以前平均价格。例如:第三行A的pre_mean_price值为(4+6(/2=5。我想得到这样的数据帧:
type date price pre_mean_price
A 2020-05-01 4 .
A 2020-06-04 6 4
A 2020-06-08 8 5
A 2020-07-03 5 6
B 2020-02-01 3 .
B 2020-04-02 4 3
如何计算pre_mean_price?非常感谢!
您可以在每个组的groupby之后使用expanding().mean()
,然后对值进行移位。
df['pre_mean_price'] = df.groupby("type")['price'].apply(lambda x:
x.expanding().mean().shift())
print(df)
type date price pre_mean_price
0 A 2020-05-01 4 NaN
1 A 2020-06-04 6 4.0
2 A 2020-06-08 8 5.0
3 A 2020-07-03 5 6.0
4 B 2020-02-01 3 NaN
5 B 2020-04-02 4 3.0
类似的东西
df['pre_mean_price'] = df.groupby('type').expanding().mean().groupby('type').shift(1)['price'].values
它产生
type date price pre_mean_price
0 A 2020-05-01 4 NaN
1 A 2020-06-04 6 4.0
2 A 2020-06-08 8 5.0
3 A 2020-07-03 5 6.0
4 B 2020-02-01 3 NaN
5 B 2020-04-02 4 3.0
简短解释
想法是
- CCD_ 2与CCD_。必须这样做,因为我们想要计算组"内的(增量(均值;类型">
- 然后,用
expanding().mean()
计算增量平均值。这一点的输出是
price
type
A 0 4.00
1 5.00
2 6.00
3 5.75
B 4 3.00
5 3.50
- 然后,用
"type"
再次分组,并用shift(1)
将组内的元素移动一行 - 然后,只提取
price
列的值(增量平均值( - 注意:这假设您的数据是按日期排序的。如果不是,请先调用
df.sort_values('date', inplace=True)