使用熊猫中的两列计算平均值



我有一个有三列的交易数据帧,我按照类型和日期进行了排序,看起来像:

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)

最新更新