我需要熊猫部族领导人的帮助。 我有这个数据集:
df1 = pd.DataFrame( {
"phase" : ["PH1", "PH1", "PH1", "PH1", "PH1" , "PH1", "PH1"] ,
"sname" : ["CB01R", "CB01R", "CB01R", "CB01R", "CB01R", "CB01R", "CB01R"] ,
"patid" : ["PG01", "PG01","PG01", "PG02", "PG02", "PG02","PG02"] ,
"vbins" : [0., 50., 80., 0., 50., 80., 90.] ,
"vprob" : [100., 60., 0., 100., 60., 10., 0.] ,
} )
我基本上可以将值分组为:
patid phase sname vbins vprob
0 PG01 PH1 CB01R 0 100
1 PG01 PH1 CB01R 50 60
2 PG01 PH1 CB01R 80 0
和
patid phase sname vbins vprob
3 PG02 PH1 CB01R 0 100
4 PG02 PH1 CB01R 50 60
5 PG02 PH1 CB01R 80 10
6 PG02 PH1 CB01R 90 0
期望的结果是将vbins和vprob平均化如下;
phase sname vbins vprob
PH1 CB01R 0.5*(0+0) 0.5*(100+100)
0.5*(50+50) 0.5*(60+60)
0.5*(80+80) 0.5*(0+10)
0.5*(NaN+90) 0.5*( NaN+0)
其中平均值超过组,NaN用于不等长度。我尝试df1.groupby(['phase', 'sname', 'patid'])
来获取组,然后卡住实现一个函数来处理所需的平均值。
答案 0 :(得分:1)
df1.groupby(
[
'phase', 'sname',
df1.groupby('patid').cumcount()
]
)['vbins', 'vprob'].sum() / 2
答案 1 :(得分:0)
你应该尝试pd.pivot_table,例如:
pd.pivot_table(data=df, index=['phase','sname'], values=['vbins','vprob'], aggfunc='mean')
让我知道它是否成功
编辑:
鉴于您的问题的性质,您应该事先添加另一列,以便参考将在pivot_table上分组的内容