gpt4 book ai didi

python - Pandas 用多列填充 DataFrame 中缺失的日期

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

我想添加特定日期范围内缺失的日期,但保留所有列。我发现很多帖子使用 afreq()resample()reindex(),但它们似乎是针对 Series 的,但我不能让它们为我的 DataFrame 工作。

给定一个示例数据框:

data = [{'id' : '123', 'product' : 'apple', 'color' : 'red', 'qty' : 10, 'week' : '2019-3-7'}, {'id' : '123', 'product' : 'apple', 'color' : 'blue', 'qty' : 20, 'week' : '2019-3-21'}, {'id' : '123', 'product' : 'orange', 'color' : 'orange', 'qty' : 8, 'week' : '2019-3-21'}]

df = pd.DataFrame(data)


color id product qty week
0 red 123 apple 10 2019-3-7
1 blue 123 apple 20 2019-3-21
2 orange 123 orange 8 2019-3-21

我的目标是返回下面; qty填为0,其他列填。当然,我还有很多其他的id。我希望能够指定要填写的开始/结束日期;此示例使用 3/7 到 3/21。

    color   id product  qty       week
0 red 123 apple 10 2019-3-7
1 blue 123 apple 20 2019-3-21
2 orange 123 orange 8 2019-3-21
3 red 123 apple 0 2019-3-14
4 red 123 apple 0 2019-3-21
5 blue 123 apple 0 2019-3-7
6 blue 123 apple 0 2019-3-14
7 orange 123 orange 0 2019-3-7
8 orange 123 orange 0 2019-3-14

如何保持 DataFrame 的其余部分完好无损?

最佳答案

在您的情况下,您只需要使用 unstackstack + reindex

df.week=pd.to_datetime(df.week)
s=pd.date_range(df.week.min(),df.week.max(),freq='7 D')

df=df.set_index(['color','id','product','week']).\
qty.unstack().reindex(columns=s,fill_value=0).stack().reset_index()
df

color id product level_3 0
0 blue 123 apple 2019-03-14 0.0
1 blue 123 apple 2019-03-21 20.0
2 orange 123 orange 2019-03-14 0.0
3 orange 123 orange 2019-03-21 8.0
4 red 123 apple 2019-03-07 10.0
5 red 123 apple 2019-03-14 0.0

关于python - Pandas 用多列填充 DataFrame 中缺失的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55035939/

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