猿问

Pandas 根据另一列跟踪每月的价格变化

我有一个如下所示的 DataFrame:


part   price      date

1      67.32      2018-12-01 00:00:00.000

3      99.16      2018-12-01 00:00:00.000

1      67.32      2018-11-01 00:00:00.000

3      167.34     2018-11-01 00:00:00.000

1      67.32      2018-10-01 00:00:00.000

3      167.34     2018-10-01 00:00:00.000

1      88.37      2018-09-01 00:00:00.000

3      212.70     2018-09-01 00:00:00.000

1      88.37      2018-08-01 00:00:00.000

3      264.02     2018-08-01 00:00:00.000

1      88.37      2018-07-01 00:00:00.000

3      264.02     2018-07-01 00:00:00.000

我想创建一个新的列,称为price_change,它跟踪每个部分的每月价格变化情况。所以上面的将变成:


part   price      date                         price_change

1      67.32      2018-12-01 00:00:00.000      0.0

3      99.16      2018-12-01 00:00:00.000      -68.18

1      67.32      2018-11-01 00:00:00.000      0.0

3      167.34     2018-11-01 00:00:00.000      0.0

1      67.32      2018-10-01 00:00:00.000      -21.05

3      167.34     2018-10-01 00:00:00.000      -45.36

1      88.37      2018-09-01 00:00:00.000      0.0

3      212.70     2018-09-01 00:00:00.000      -51.32

1      88.37      2018-08-01 00:00:00.000      0.0

3      264.02     2018-08-01 00:00:00.000      0.0

1      88.37      2018-07-01 00:00:00.000      0.0

3      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一起,这几乎有效。问题是每次到达新零件时,这不会重新启动差异计算。


慕村225694
浏览 156回答 1
1回答

慕田峪4524236

就在sort_values和groupby然后找到DIFF:df['diff'] = df.sort_values('date').groupby('part')['price'].diff().fillna(0)    part   price       date   diff0      1   67.32 2018-12-01   0.001      3   99.16 2018-12-01 -68.182      1   67.32 2018-11-01   0.003      3  167.34 2018-11-01   0.004      1   67.32 2018-10-01 -21.055      3  167.34 2018-10-01 -45.366      1   88.37 2018-09-01   0.007      3  212.70 2018-09-01 -51.328      1   88.37 2018-08-01   0.009      3  264.02 2018-08-01   0.0010     1   88.37 2018-07-01   0.0011     3  264.02 2018-07-01   0.00
随时随地看视频慕课网APP

相关分类

Python
我要回答