首页 > 解决方案 > 将具有移位功能的 lambda 应用于多列

问题描述

我正在尝试应用“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)

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

如果有人可以请帮助我

标签: pythonpandas

解决方案


修复你的代码,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)

推荐阅读