gpt4 book ai didi

python - Pandas 中产品的连续日期

转载 作者:行者123 更新时间:2023-12-04 02:29:25 25 4
gpt4 key购买 nike

我开始使用 Pandas,但遇到了一些我真的不知道如何解决的问题。

我有一个包含日期、产品、库存和销售额的数据框。缺少一些日期和产品。我想获得每个产品在某个日期范围内的时间序列。

例如:

           product  udsStock udsSales
date
2019-12-26 14 161 848
2019-12-27 14 1340 914
2019-12-30 14 856 0
2019-12-25 4 3132 439
2019-12-27 4 3177 616
2020-01-01 4 500 883

所有产品的范围必须相同,即使一种产品没有出现在范围内的一个日期也是如此。

如果我想要 2019-12-25 到 2020-01-01 的范围,最终的数据帧应该是这样的:

           product  udsStock udsSales
date
2019-12-25 14 NaN NaN
2019-12-26 14 161 848
2019-12-27 14 1340 914
2019-12-28 14 NaN NaN
2019-12-29 14 NaN NaN
2019-12-30 14 856 0
2019-12-31 14 NaN NaN
2020-01-01 14 NaN NaN
2019-12-25 4 3132 439
2019-12-26 4 NaN NaN
2019-12-27 4 3177 616
2019-12-28 4 NaN NaN
2019-12-29 4 NaN NaN
2019-12-30 4 NaN NaN
2019-12-31 4 NaN NaN
2020-01-01 4 500 883

我曾尝试按范围重建索引,但它不起作用,因为存在相同的索引。

idx = pd.date_range('25-12-2019', '01-01-2020')
df = df.reindex(idx)

我也试过按日期和产品索引然后重新索引,但我不知道如何放置丢失的产品。

还有什么想法吗?

提前致谢

最佳答案

我们可以使用 pd.date_rangegroupby.reindex 来实现你的结果:

date_range = pd.date_range(start='2019-12-25', end='2020-01-01', freq='D')
df = df.groupby('product', sort=False).apply(lambda x: x.reindex(date_range))
df['product'] = df.groupby(level=0)['product'].ffill().bfill()
df = df.droplevel(0)
            product  udsStock  udsSales
2019-12-25 14.0 NaN NaN
2019-12-26 14.0 161.0 848.0
2019-12-27 14.0 1340.0 914.0
2019-12-28 14.0 NaN NaN
2019-12-29 14.0 NaN NaN
2019-12-30 14.0 856.0 0.0
2019-12-31 14.0 NaN NaN
2020-01-01 14.0 NaN NaN
2019-12-25 4.0 3132.0 439.0
2019-12-26 4.0 NaN NaN
2019-12-27 4.0 3177.0 616.0
2019-12-28 4.0 NaN NaN
2019-12-29 4.0 NaN NaN
2019-12-30 4.0 NaN NaN
2019-12-31 4.0 NaN NaN
2020-01-01 4.0 500.0 883.0

关于python - Pandas 中产品的连续日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65275226/

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