将具有移位功能的lambda应用于多列

时间:2020-05-25 16:43:28

标签: python pandas

我正在尝试应用“ PPG”(上一时期的增长)公式,并在涉及多列时进行堆叠(对于一列来说,效果很好)。

这里是示例:

import pandas as pd
df = pd.DataFrame({"ID": [1,3,2,2,3,1,3],
               "Date": [20200109, 20200204, 20200307, 20200107, 20200108, 20200214, 20200314],
               "A": [20,10,40,40,10,20,30], 
               "B": [20,30,40,50,20, 30, 10]})

当我需要计算一列中的值之间的差异时,就可以了:

df['new']=df.sort_values(['ID','Date']).groupby('ID')['A'].apply(lambda x:x/x.shift(1)-1)

但是我不知道如何为两个不同的列(A和B)求解它。我要使用的代码是:

df['new']=df.sort_values(['ID','Date']).groupby('ID').apply(lambda x: x.A/x.B.shift(1)-1)

并返回错误:插入的列的索引与框架索引不兼容

如果有人可以帮助我

1 个答案:

答案 0 :(得分:1)

修复您的代码apply,然后创建多重索引,因此我们需要使索引与df相同,以便我们可以分配值

df['new']=df.sort_values(['ID','Date']).groupby('ID').apply(lambda x: x.A/x.B.shift(1)-1).reset_index(level=0,drop=True)
相关问题