首页 > 解决方案 > 在两列上应用函数,指的是上一行 - Pandas

问题描述

我有包含 x 和 y 变量的数据框,索引是:ID、日期和时间。我想创建将通过应用一些定义的函数来创建的新变量。

例如,函数可以是:

def some_function(x1, x2 , y1, y2):
    z = x1*x2 + y1*y2
    return z

注意:该功能应分别应用于每个 ID。

数据说明:

ID  date        time    x   y
1   08/27/2019  18:00   1   2
                19:00   3   4
                20:00   ..  ..
                21:00   ..  ..
2   08/28/2019  18:00   ..  ..
                19:00   ..  ..
                19:31   ..  ..
                19:32   ..  ..
                19:34   ..  ..

例如,新变量中的第一行应该是 0,因为没有前一行,第二行应该是 3*1 + 4*2 = 11。

标签: pandas

解决方案


假设索引是数字,

(df.join(df.groupby('id')[['x','y']].shift(),lsuffix='1',rsuffix='2')
   .apply(lambda x:some_function(x.x1,x.x2,x.y1,x.y2),axis=1))

推荐阅读