计算逐行平均值 pandas python
Calculate row-wise average pandas python
我是 python 的新手。我想根据唯一 ID 计算行式平均值。
我的数据框是:
ID Time[h] concentration[g/L]
15127 V527 23.425 59.9
20361 V527 27.570 73.4
21880 V527 29.281 75.4
33133 V560 27.677 75.9
35077 V560 30.183 75.7
37117 V560 31.847 74.6
我想根据每个 ID 计算行式平均值。这样我的输出看起来像这样
ID Time[h] concentration[g/L] avg [g/L]
15127 V527 23.425 59.9 NaN
20361 V527 27.570 73.4 66.5
21880 V527 29.281 75.4 74.4
33133 V560 27.677 75.9 NaN
35077 V560 30.183 75.7 66.5
37117 V560 31.847 74.6 75.8
我试过了:
df.groupby(['ID'])['concentration[g/L]'].mean()
但这返回了每个 ID 的整体平均值。
所以我尝试了这个:
df.groupby(['ID'])['concentration[g/L]'].transform('mean')
这 returns 又是每组的平均值,但填充到与我的 df 相同的长度。
你能帮帮我吗,如果有什么不清楚的地方我可以改一下我的问题。
提前致谢!
尝试使用 pd.rolling.mean
,window 为 2:
>>> df['avg [g/L]'] = df.groupby('ID')['concentration[g/L]'].rolling(2).mean().values
>>> df
ID Time[h] concentration[g/L] avg [g/L]
15127 V527 23.425 59.9 NaN
20361 V527 27.570 73.4 66.65
21880 V527 29.281 75.4 74.40
33133 V560 27.677 75.9 NaN
35077 V560 30.183 75.7 75.80
37117 V560 31.847 74.6 75.15
您可以使用 shift
:
df['avg'] = df.groupby('ID')['concentration[g/L]'].apply(lambda x: (x + x.shift())/2)
print(df)
ID Time[h] concentration[g/L] avg
15127 V527 23.425 59.9 NaN
20361 V527 27.570 73.4 66.65
21880 V527 29.281 75.4 74.40
33133 V560 27.677 75.9 NaN
35077 V560 30.183 75.7 75.80
37117 V560 31.847 74.6 75.15
我是 python 的新手。我想根据唯一 ID 计算行式平均值。
我的数据框是:
ID Time[h] concentration[g/L]
15127 V527 23.425 59.9
20361 V527 27.570 73.4
21880 V527 29.281 75.4
33133 V560 27.677 75.9
35077 V560 30.183 75.7
37117 V560 31.847 74.6
我想根据每个 ID 计算行式平均值。这样我的输出看起来像这样
ID Time[h] concentration[g/L] avg [g/L]
15127 V527 23.425 59.9 NaN
20361 V527 27.570 73.4 66.5
21880 V527 29.281 75.4 74.4
33133 V560 27.677 75.9 NaN
35077 V560 30.183 75.7 66.5
37117 V560 31.847 74.6 75.8
我试过了:
df.groupby(['ID'])['concentration[g/L]'].mean()
但这返回了每个 ID 的整体平均值。
所以我尝试了这个:
df.groupby(['ID'])['concentration[g/L]'].transform('mean')
这 returns 又是每组的平均值,但填充到与我的 df 相同的长度。
你能帮帮我吗,如果有什么不清楚的地方我可以改一下我的问题。
提前致谢!
尝试使用 pd.rolling.mean
,window 为 2:
>>> df['avg [g/L]'] = df.groupby('ID')['concentration[g/L]'].rolling(2).mean().values
>>> df
ID Time[h] concentration[g/L] avg [g/L]
15127 V527 23.425 59.9 NaN
20361 V527 27.570 73.4 66.65
21880 V527 29.281 75.4 74.40
33133 V560 27.677 75.9 NaN
35077 V560 30.183 75.7 75.80
37117 V560 31.847 74.6 75.15
您可以使用 shift
:
df['avg'] = df.groupby('ID')['concentration[g/L]'].apply(lambda x: (x + x.shift())/2)
print(df)
ID Time[h] concentration[g/L] avg
15127 V527 23.425 59.9 NaN
20361 V527 27.570 73.4 66.65
21880 V527 29.281 75.4 74.40
33133 V560 27.677 75.9 NaN
35077 V560 30.183 75.7 75.80
37117 V560 31.847 74.6 75.15