python - 将具有移位功能的 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)
它返回错误:插入列的索引与框架索引不兼容
如果有人可以请帮助我
解决方案
修复你的代码,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)
推荐阅读
- python - 从嵌套为python中字典值的两个列表中检索数据的最有效方法
- python - Bokeh 可以检测屏幕尺寸并重塑移动设备的布局吗?
- c++ - 交换两个对象的两个属性的值
- python - txt 与 dict 的 str 成 dict
- amazon-cloudwatch - CloudWatch Log Insights 中的多方面时间序列可视化
- compiler-construction - 转译/代码生成 - 变量声明问题
- javafx - 尝试使用 FXML 文件进行编译时,JavaFX 程序不起作用
- python - 错误:[Index(['...'], dtype='object')] 中没有一个在 [index] 中
- java - 带有浮动操作按钮的 Android 导航抽屉
- python - 如何将 pandas 3 列数据框中的列转换为 Python 中的矩阵格式?