gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 08:23:21 33 4
gpt4 key购买 nike

我有一个如下所示的 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/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com