[英]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')
這再次返回每個組的平均值,但填充到我的 df 相同的長度。
你能幫我嗎,如果有什么不清楚的,我可以改寫我的問題。
提前致謝!
嘗試使用窗口為 2 的pd.rolling.mean
:
>>> 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.