在熊猫分组模式下,使用用户定义的功能,将其应用于多个列,并将结果分配给新的熊猫列

时间:2020-09-17 18:35:05

标签: python pandas dataframe

我有以下数据集:

> dt
   a b group
1: 1 5     a
2: 2 6     a
3: 3 7     b
4: 4 8     b

我具有以下功能:

def bigSum(a,b):
   return(a.min() + b.max())

我想将此功能应用于groupby模式(按组)的a和b列,并将其分配给数据帧的新列c。我希望的结果是

    > dt
   a b group  c
1: 1 5     a  7
2: 2 6     a  7
3: 3 7     b  11
4: 4 8     b  11

例如,如果我将使用R data.table,则将执行以下操作:

dt[, c := bigSum(a,b), by = group]

,它将完全符合我的预期。我对大熊猫中是否有类似的东西很感兴趣。

1 个答案:

答案 0 :(得分:0)

pandas中,我们有transform

g = df.groupby('group')
df['out'] = g.a.transform('min') + g.b.transform('max')
df
Out[282]: 
   a  b group  out
1  1  5     a    7
2  2  6     a    7
3  3  7     b   11
4  4  8     b   11

更新

df['new'] = df.groupby('group').apply(lambda x : bigSum(x['a'],x['b'])).reindex(df.group).values
df
Out[287]: 
   a  b group  out  new
1  1  5     a    7    7
2  2  6     a    7    7
3  3  7     b   11   11
4  4  8     b   11   11