我有一个如下所示的 DataFrame:part price date1 67.32 2018-12-01 00:00:00.0003 99.16 2018-12-01 00:00:00.0001 67.32 2018-11-01 00:00:00.0003 167.34 2018-11-01 00:00:00.0001 67.32 2018-10-01 00:00:00.0003 167.34 2018-10-01 00:00:00.0001 88.37 2018-09-01 00:00:00.0003 212.70 2018-09-01 00:00:00.0001 88.37 2018-08-01 00:00:00.0003 264.02 2018-08-01 00:00:00.0001 88.37 2018-07-01 00:00:00.0003 264.02 2018-07-01 00:00:00.000我想创建一个新的列,称为price_change,它跟踪每个部分的每月价格变化情况。所以上面的将变成:part price date price_change1 67.32 2018-12-01 00:00:00.000 0.03 99.16 2018-12-01 00:00:00.000 -68.181 67.32 2018-11-01 00:00:00.000 0.03 167.34 2018-11-01 00:00:00.000 0.01 67.32 2018-10-01 00:00:00.000 -21.053 167.34 2018-10-01 00:00:00.000 -45.361 88.37 2018-09-01 00:00:00.000 0.03 212.70 2018-09-01 00:00:00.000 -51.321 88.37 2018-08-01 00:00:00.000 0.03 264.02 2018-08-01 00:00:00.000 0.01 88.37 2018-07-01 00:00:00.000 0.03 264.02 2018-07-01 00:00:00.000 0.0如果到达最旧的日期,price_change则应为 0。我试过排序和使用 pd.DataFrame.diff 如下:df.sort_values(by=['part', 'date'])df['price_change'] = df['price'].diff()与fillna一起,这几乎有效。问题是每次到达新零件时,这不会重新启动差异计算。
1 回答

慕田峪4524236
TA贡献1875条经验 获得超5个赞
就在sort_values和groupby然后找到DIFF:
df['diff'] = df.sort_values('date').groupby('part')['price'].diff().fillna(0)
part price date diff
0 1 67.32 2018-12-01 0.00
1 3 99.16 2018-12-01 -68.18
2 1 67.32 2018-11-01 0.00
3 3 167.34 2018-11-01 0.00
4 1 67.32 2018-10-01 -21.05
5 3 167.34 2018-10-01 -45.36
6 1 88.37 2018-09-01 0.00
7 3 212.70 2018-09-01 -51.32
8 1 88.37 2018-08-01 0.00
9 3 264.02 2018-08-01 0.00
10 1 88.37 2018-07-01 0.00
11 3 264.02 2018-07-01 0.00
添加回答
举报
0/150
提交
取消