【发布时间】:2019-11-09 22:58:58
【问题描述】:
我有一个如下所示的数据框:
pd.DataFrame({'category': [1,1,1,2,2,2,3,3,3,4],
'order_start': [1,2,3,1,2,3,1,2,3,1],
'time': [1, 4, 3, 6, 8, 17, 14, 12, 13, 16]})
Out[40]:
category order_start time
0 1 1 1
1 1 2 4
2 1 3 3
3 2 1 6
4 2 2 8
5 2 3 17
6 3 1 14
7 3 2 12
8 3 3 13
9 4 1 16
我想创建一个新列,其中包含同一类别先前时间的平均值。如何创建它?
新列应如下所示:
pd.DataFrame({'category': [1,1,1,2,2,2,3,3,3,4],
'order_start': [1,2,3,1,2,3,1,2,3,1],
'time': [1, 4, 3, 6, 8, 17, 14, 12, 13, 16],
'mean': [np.nan, 1, 2.5, np.nan, 6, 7, np.nan, 14, 13, np.nan]})
Out[41]:
category order_start time mean
0 1 1 1 NaN
1 1 2 4 1.0 = 1 / 1
2 1 3 3 2.5 = (4+1)/2
3 2 1 6 NaN
4 2 2 8 6.0 = 6 / 1
5 2 3 17 7.0 = (8+6) / 2
6 3 1 14 NaN
7 3 2 12 14.0
8 3 3 13 13.0
9 4 1 16 NaN
注意:如果是第一次,平均值应该是NaN。
编辑:正如 cs95 所述,我的问题与 this one 并不完全相同,因为这里需要扩展。
【问题讨论】:
-
@G.Anderson rolling 不行,我认为我们需要在这里扩展 :)
-
我又学到了另一个新东西。干杯!
-
@G.Anderson:这不是重复的,请收回接近投票
标签: python pandas group-by pandas-groupby