gpt4 book ai didi

python - 在 pandas 数据框的平面文件中插入缺失的日期

转载 作者:行者123 更新时间:2023-12-01 00:04:03 26 4
gpt4 key购买 nike

我有一个数据框,缺少日期。是否可以使用第一列中的二月和三月的所有日期更新此数据框。我希望缺失日期的价格为 0,产品为铅笔或钢笔,以制作完整的列表。数据框并不总是处于正确的顺序,因此不应使用 Ffill。

               Price   Product
1/Feb/2020 4400 Pencils
2/Feb/2020 0 Pencils
3/Feb/2020 0 Pencils
27/Feb/2020 0 Pencils
28/Feb/2020 0 Pencils
1/Mar/2020 55000 Pencils
2/Mar/2020 0 Pencils
3/Mar/2020 0 Pencils
30/Mar/2020 0 Pencils
31/Mar/2020 0 Pencils
1/Feb/2020 4400 Pens
2/Feb/2020 4454 Pens
3/Feb/2020 0 Pens
27/Feb/2020 34534 Pens
28/Feb/2020 345345 Pens
1/Mar/2020 550345 Pens
2/Mar/2020 354 Pens
3/Mar/2020 454 Pens
30/Mar/2020 454 Pens
31/Mar/2020 4545 Pens

最佳答案

如果每月始终存在第一个和最后一个值,一个想法是通过DataFrame.unstack reshape ,通过 DataFrame.asfreq 添加缺失的日期时间并通过 DataFrame.stack reshape 回来:

df.index = pd.to_datetime(df.index)

df = (df.set_index('Product', append=True)
.unstack()
.asfreq('d')
.stack(dropna=False)
.sort_index(level=[1,0])
.reset_index(level=1))
print (df)
Product Price
2020-02-01 Pencils 4400.0
2020-02-02 Pencils 0.0
2020-02-03 Pencils 0.0
2020-02-04 Pencils NaN
2020-02-05 Pencils NaN
... ...
2020-03-27 Pens NaN
2020-03-28 Pens NaN
2020-03-29 Pens NaN
2020-03-30 Pens 454.0
2020-03-31 Pens 4545.0

[120 rows x 2 columns]

通用解决方案 DataFrame.reindex日期范围:

df.index = pd.to_datetime(df.index)

#convert minimal/ maximal datetimes for first and last day of month
s = df.index.min().to_period('m').to_timestamp()
e = df.index.max().to_period('m').to_timestamp(how='e')

df = (df.set_index('Product', append=True)
.unstack()
.reindex(pd.date_range(s, e))
.stack(dropna=False)
.sort_index(level=[1,0])
.reset_index(level=1))

关于python - 在 pandas 数据框的平面文件中插入缺失的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60111491/

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