gpt4 book ai didi

python - 用 Pandas DataFrame 中月份 (AND - 1) 的值替换月份 IN 的 NaN

转载 作者:太空宇宙 更新时间:2023-11-03 15:36:35 25 4
gpt4 key购买 nike

我有一些每月更新的零件定价数据。它已被拉入 Pandas 数据框。有时,某个零件在某个月没有价格,在这种情况下,我想用该零件上个月的价格替换它。

如果上个月也有该部分的缺失价格,我想继续向后搜索直到找到有效价格,在这种情况下,该价格应向前传播直到找到有效价格。

如果找不到该部分的有效价格,那么我希望将该部分完全从数据框中删除。

如果前几个月包含某个部分的缺失价格,我想删除这些行,以便第一条记录始终是有效价格。

基本上,我想在价格栏上进行前向填充,但要考虑零件号。

举个例子,我将从这样的事情开始:

part   price      date
1 NaN 2018-12-01 00:00:00.000
2 NaN 2018-12-01 00:00:00.000
3 99.16 2018-12-01 00:00:00.000
1 NaN 2018-11-01 00:00:00.000
2 NaN 2018-11-01 00:00:00.000
3 NaN 2018-11-01 00:00:00.000
1 67.32 2018-10-01 00:00:00.000
2 NaN 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
2 NaN 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
2 NaN 2018-08-01 00:00:00.000
3 NaN 2018-08-01 00:00:00.000
1 88.37 2018-07-01 00:00:00.000
2 NaN 2018-07-01 00:00:00.000
3 264.02 2018-07-01 00:00:00.000
1 NaN 2018-06-01 00:00:00.000

以此结束:

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

最佳答案

以下应该有效:

df.loc[lambda df: df.groupby('part')['price'].transform(np.any)]\
.sort_values('date')\
.assign(price=lambda df: df.groupby('part')['price'].ffill())\
.dropna()\
.reset_index(drop=True)

结果:

    part    price   date
0 1 88.37 2018-07-01
1 3 264.02 2018-07-01
2 1 88.37 2018-08-01
3 3 264.02 2018-08-01
4 1 88.37 2018-09-01
5 3 212.70 2018-09-01
6 1 67.32 2018-10-01
7 3 167.34 2018-10-01
8 1 67.32 2018-11-01
9 3 167.34 2018-11-01
10 1 67.32 2018-12-01
11 3 99.16 2018-12-01

更多细节:

  • 方法链的第一行删除其部件号在任何日期都没有非空价格的所有行
  • 下一行按日期对值进行排序
  • 第 3 行将 'price' 列按组替换为前向填充
  • 第 4 行删除包含空值的行
  • 最后一行只是为了好看

如果你想要df按照你显示的顺序,你可以翻转数据框:

df = df.iloc[::-1].reset_index(drop=True)

关于python - 用 Pandas DataFrame 中月份 (AND - 1) 的值替换月份 IN 的 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54450186/

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