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

标签 python pandas dataframe

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

相关文章:

python - Pandas:向现有数据框添加新列以进行分组

Python/Pandas 遍历列

python - 在 Python 中处理常见文件

python - 从 python 中的 gzip 文件中读取 utf-8 字符

python-3.x - 类型错误 : drop() got multiple values for argument 'axis' when dropping multiple columns

python - pandas 为返回的答案找到对应的行值

python - 循环执行多个SQL语句并将结果存储在Python对象中

python - 您如何使用 os.chdir 转到减去最后一步的路径?

python - 如何做 pd.get_dummies 或其他方式?

python - 将数字转换为 pandas DataFrame 中的特定字符串格式