计算逐行平均值 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