我有一個如下所示的 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
提交
取消