数据框:通过其他列组添加具有平均值的列



假设我有以下数据帧:

data = pd.DataFrame({'id' : ['1','2','3','4','5'], 'group' : ['1','1','2','1','2'], 
'state' : ['True','False','False','True','True'], 'value' : [11,12,5,8,3]})

我想在前面的数据帧中添加一个新列,该列的平均值为'state',即

pd.DataFrame({'id' : ['1','2','3','4','5'], 'group' : ['1','1','2','1','2'],
'state' : ['True','False','False','True','True'], 'avg_state' : [0.66,0.66,0.5,0.66,0.5] ,value' : [11,12,5,8,3]})

IIUC将state列更改回布尔值,以便您可以使用sumgroupbytransform:

df["avg_state"] = (df.assign(state=df["state"].map({"True":True, "False":False}))
.groupby("group")["state"]
.transform(lambda d: d.sum()/d.count()))

print (df)

id group  state  value  avg_state
0  1     1   True     11   0.666667
1  2     1  False     12   0.666667
2  3     2  False      5   0.500000
3  4     1   True      8   0.666667
4  5     2   True      3   0.500000

使用pd.evaltransform的另一种选择,使用mean

data['av_state'] = (data.assign(state=pd.eval(data['state']).astype(int))
.groupby("group")['state'].transform('mean'))

print(data)
id group  state  value  av_state
0  1     1   True     11  0.666667
1  2     1  False     12  0.666667
2  3     2  False      5  0.500000
3  4     1   True      8  0.666667
4  5     2   True      3  0.500000

相关内容

  • 没有找到相关文章

最新更新