计算逐行平均熊猫Python

时间:2020-09-28 15:05:41

标签: python pandas mean rowwise

我是python的新手。我想基于唯一ID计算按行平均值。

我的DataFrame是:

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

这再次返回每个组的均值,但填充到我df的相同长度。

如果有不清楚的地方,我可以改一下我的问题。

预先感谢!

2 个答案:

答案 0 :(得分:1)

尝试将pd.rolling.mean与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

答案 1 :(得分:0)

您可以使用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
相关问题