我有这个数据框:
d = {'day': [0,0,0,0,0,0, 1,1,1,1,1,1, 2,2,2,2,2,2], 'period': ['p1','p1','op1','op1','p2','p2','p1','p1','op1','op1','p2','p2','p1','p1','op1','op1','p2','p2'], 's1':[2,2,3,6,4,2,8,2,1,2,1,2,2,9,5,2,2,3]}
df = pd.DataFrame(data=d)
我需要这个结果:
我尝试过:
df.groupby('period', as_index=False)['s1'].mean()
这是结果:
但这并不能解决我的问题。
答案 0 :(得分:1)
您可以尝试以下方法:
df.groupby(['period',df.groupby(['day','period']).cumcount()]).mean()
输出:
day s1
period
op1 0 1.0 3.000000
1 1.0 3.333333
p1 0 1.0 4.000000
1 1.0 4.333333
p2 0 1.0 2.333333
1 1.0 2.333333
答案 1 :(得分:0)
计算一个将第二个值分组的列。然后groupby()
。
d = {'day': [0,0,0,0,0,0, 1,1,1,1,1,1, 2,2,2,2,2,2], 'period': ['p1','p1','op1','op1','p2','p2','p1','p1','op1','op1','p2','p2','p1','p1','op1','op1','p2','p2'], 's1':[2,2,3,6,4,2,8,2,1,2,1,2,2,9,5,2,2,3]}
df = pd.DataFrame(data=d)
dfm = df.assign(
even=lambda dfa: dfa.index%2
).groupby(["period","even"]).mean().reset_index().drop(columns="even")
print(dfm.to_string())
输出
period day s1
0 op1 1.0 3.000000
1 op1 1.0 3.333333
2 p1 1.0 4.000000
3 p1 1.0 4.333333
4 p2 1.0 2.333333
5 p2 1.0 2.333333