大熊猫有助于平均不均匀长度的群体

时间:2017-01-24 20:36:14

标签: python pandas group-by

我需要熊猫部族领导人的帮助。 我有这个数据集:

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'])来获取组,然后卡住实现一个函数来处理所需的平均值。

2 个答案:

答案 0 :(得分:1)

df1.groupby(
    [
        'phase', 'sname',
        df1.groupby('patid').cumcount()
    ]
)['vbins', 'vprob'].sum() / 2

enter image description here

答案 1 :(得分:0)

你应该尝试pd.pivot_table,例如:

pd.pivot_table(data=df, index=['phase','sname'], values=['vbins','vprob'], aggfunc='mean')

让我知道它是否成功

编辑:

鉴于您的问题的性质,您应该事先添加另一列,以便参考将在pivot_table上分组的内容