我正在尝试应用“ 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)
并返回错误:插入的列的索引与框架索引不兼容
如果有人可以帮助我
答案 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)