如何从两列进行数据框架计算以使用自定义函数生成另一列?

时间:2019-07-09 20:04:30

标签: python pandas

我正在尝试应用一个自定义函数,该函数将两个参数按数据帧应用于组的某些两列。

我尝试使用apply和groupby数据框,但是欢迎任何建议。

我有以下数据框:

    id    y       z
    115  10      820
    115  12      960
    115  13     1100
    144  25     2500
    144  55     5500
    144  65      960
    144  68     6200
    144  25     2550
    146  25     2487
    146  25     2847
    146  25     2569
    146  25     2600
    146  25     2382

我想应用带有两个参数的自定义函数并通过id获取结果。

def train_logmodel(x, y):
##.........
    return x


data.groupby('id')[['y','z']].apply(train_logmodel)


TypeError: train_logmodel() missing 1 required positional argument: 'y'

我想知道如何传递“ y”和“ z”,以便通过每个ID估算所需的列“ x”。

预期输出示例:

       id   x
      115 0.23
      144 0.45
      146 0.58

与问题How to apply a function to two columns of Pandas dataframe

有点不同

在这种情况下,我们必须处理groupby数据帧,它的工作原理与数据帧略有不同。

谢谢!

1 个答案:

答案 0 :(得分:0)

不知道您的train_logmodel函数,在这里我只能举一个一般的例子。您的函数有一个参数,从该参数可以获取函数内部的列:

def train_logmodel(data): 
    return (data.z / data.y).min()

df.groupby('id').apply(train_logmodel)

结果:

id
115    80.000000
144    14.769231
146    95.280000