我有一个看起来像这样的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一起几乎可以使用。问题在于,每次到达新零件时,这不会重新开始差异计算。

最佳答案

只需sort_valuesgroupby然后找到差异:

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

关于python - Pandas 根据另一列跟踪价格的每月变化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54471034/

10-12 17:50