【发布时间】:2019-04-28 17:21:59
【问题描述】:
如果我想根据 id 列获取过去 2 个值的平均值,我会执行以下操作:
df['rolling_mean_2'] = df.groupby('id').apply(lambda x: x.rolling(2, min_periods=2).mean())
>> id value rolling_mean_2
0 b 1 NaN
1 b 3 2
2 d 5 NaN
3 d 7 6
没错,直截了当。 好的,现在假设我的 id 是一个具有 4 个唯一值的列表形式 (a, b, c, d)
x = [{'id': ['a','b','d'], 'value':1},
{'id': ['b','a','d'], 'value':3},
{'id': ['b','a','d'], 'value':5},
{'id': ['a','b','c'], 'value':7}]
df = pd.DataFrame(x)
现在,如何根据列表中包含的唯一值从过去 2 个值(包括当前行)中获取平均值?因此,我的预期输出如下:
我只打算使用变量 a 和 d 来保持整洁和简单。
>> id value a_rolling_mean_2 d_rolling_mean_2
0 [a, b, d] 1 NaN NaN
1 [b, a, d] 3 2 2
2 [b, a, d] 5 4 4
3 [a, b, c] 7 6 NaN
【问题讨论】:
标签: python python-3.x pandas lambda pandas-groupby