gpt4 book ai didi

python - 我将如何按列表形式的唯一值进行分组?

转载 作者:太空宇宙 更新时间:2023-11-04 09:36:31 25 4
gpt4 key购买 nike

如果我想根据 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 个值(包括当前行)中获取平均值?因此,我的预期输出如下:

I'm only going to use variable a and d to keep tidiness and simplicity.

>>          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

最佳答案

使用 concat 和数据框构造函数重新创建数据框

df=df.rename(columns={'value':'V'})
newdf=pd.concat([df.V,pd.DataFrame(df.id.tolist(),index=df.index)],axis=1)

然后,使用 meltgroupby rolling meanstack 得到输出

newdf.reset_index().melt(['index','V']).set_index('index').sort_index().groupby('value').V.rolling(2, min_periods=2).mean().unstack(0)
Out[260]:
value a b c d
index
0 NaN NaN NaN NaN
1 2.0 2.0 NaN 2.0
2 4.0 4.0 NaN 4.0
3 6.0 6.0 NaN NaN

关于python - 我将如何按列表形式的唯一值进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53491708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com