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

时间:2020-11-11 12:00:30

标签: python pandas

我有一个包含三列的交易数据框,并按类型和日期排序,如下所示:

  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?非常感谢!

2 个答案:

答案 0 :(得分:5)

您可以在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

答案 1 :(得分:2)

类似

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

简短说明

想法是

  • "type".groupby()组成的第一分组。之所以必须这样做,是因为我们要计算“类型”组中 中的(增量)均值。
  • 然后,使用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)