[英]Pandas groupby then rolling mean
我正在使用下面的代碼嘗試按列值分組,然后僅對該組的有序數據運行累積總和和移動平均值:
#this works OK
df['csum'] = df.sort_values(['name','day_time','delta_minutes'],ascending=True).groupby(['name']) ['value'].cumsum()
#throws error
df['rolling'] = df.sort_values(['name','day_time','delta_minutes'],ascending=True).groupby(['name'])['value'].rolling(window=2).mean()
原始數據框:
name value delta_minutes day_time
0 MAC000039 0.069 0 2012-10-13
1 MAC000039 0.054 30 2012-10-13
2 MAC000039 0.085 60 2012-10-13
3 MAC000040 0.082 0 2012-10-12
4 MAC000040 0.053 30 2012-10-12
5 MAC000040 0.075 60 2012-10-12
6 MAC000040 0.195 90 2012-10-12
7 MAC000039 0.098 0 2012-10-12
8 MAC000039 0.055 30 2012-10-12
9 MAC000039 0.054 60 2012-10-12
10 MAC000039 0.099 90 2012-10-12
預期輸出
name value delta_minutes day_time csum rolling
0 MAC000039 0.069 0 2012-10-13 0.375 ..
1 MAC000039 0.054 30 2012-10-13 0.429 ..
2 MAC000039 0.085 60 2012-10-13 0.514 ..
嘗試滾動平均值時出現以下錯誤
TypeError: incompatible index of inserted column with frame index
知道如何做到這一點嗎?
出現錯誤是因為df.sort_values(['name','day_time','delta_minutes'],ascending=True).groupby(['name'])['value'].rolling(window=2).mean()
有一個MultiIndex
。 要修復它,請重置'name'
索引並將其刪除。
import pandas as pd
"""
name value delta_minutes day_time
0 MAC000039 0.069 0 2012-10-13
1 MAC000039 0.054 30 2012-10-13
2 MAC000039 0.085 60 2012-10-13
3 MAC000040 0.082 0 2012-10-12
4 MAC000040 0.053 30 2012-10-12
5 MAC000040 0.075 60 2012-10-12
6 MAC000040 0.195 90 2012-10-12
7 MAC000039 0.098 0 2012-10-12
8 MAC000039 0.055 30 2012-10-12
9 MAC000039 0.054 60 2012-10-12
10 MAC000039 0.099 90 2012-10-12
"""
df = pd.read_clipboard()
# sorting before adding columns
df.sort_values([
'name',
'day_time',
'delta_minutes'
], inplace = True)
# cumulative sum grouped on name
df['csum'] = df.groupby('name').value.cumsum()
# reset index `name` and drop it
df['rolling'] = df.groupby('name').value.rolling(2).mean().reset_index(level = 'name', drop = True)
print(df)
name value delta_minutes day_time csum rolling
7 MAC000039 0.098 0 2012-10-12 0.098 NaN
8 MAC000039 0.055 30 2012-10-12 0.153 0.0765
9 MAC000039 0.054 60 2012-10-12 0.207 0.0545
10 MAC000039 0.099 90 2012-10-12 0.306 0.0765
0 MAC000039 0.069 0 2012-10-13 0.375 0.0840
1 MAC000039 0.054 30 2012-10-13 0.429 0.0615
2 MAC000039 0.085 60 2012-10-13 0.514 0.0695
3 MAC000040 0.082 0 2012-10-12 0.082 NaN
4 MAC000040 0.053 30 2012-10-12 0.135 0.0675
5 MAC000040 0.075 60 2012-10-12 0.210 0.0640
6 MAC000040 0.195 90 2012-10-12 0.405 0.1350
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.