gpt4 book ai didi

python - 填充 Pandas 系列中缺失的日期

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

我在数据帧上进行 groupby 和重新采样操作后创建了一个 Panas 系列对象。

我想用零数量来填充每个 item_type 的最短日期和最长日期之间缺失的天数。

    data = {'date_time': ['2018-01-22 12:40:03', '2018-01-22 13:40:03', '2018-01-23 15:00:05', '2018-01-26 14:30:04'], 
'quantity': [11, 21, 23, 12], 'item_type': ['543', '543', '842', '543']}
df = pd.DataFrame(data, columns = ['date_time', 'quantity' , 'item_type'])
df.index = df['date_time']
df.index = pd.to_datetime(df.index)
min_date = df.index.min()
max_date = df.index.max()
grouped = df.groupby('item_type').resample('D')['quantity'].sum()
print(grouped)

>> Message: item_type date_time
543 2018-01-22 32.0
2018-01-23 NaN
2018-01-24 NaN
2018-01-25 NaN
2018-01-26 12.0
842 2018-01-23 23.0
Name: quantity, dtype: float64

如果我不按天重新采样,我可以获得一个可以迭代的 groupby 对象,然后从每个组创建一个数据帧并获取总计,但总计不是当天的:

grouped = df.groupby('item_type')
for item_type, group in grouped:
df = group.groupby(['date_time']).sum()

如何获取每天每种商品类型的总数量,根据下面的所需输出将缺失天数的数量值设置为零?

item_type   date_time  quantity
543 2018-01-22 32.0
2018-01-23 0
2018-01-24 0
2018-01-25 0
2018-01-26 12.0
842 2018-01-22 0
2018-01-23 23.0
2018-01-24 0
2018-01-25 0
2018-01-26 0

最佳答案

我不确定在分组期间执行此操作有多容易,但您肯定可以在分组后执行此操作。使用 pd.date_range 创建日期范围,然后重新索引

g = df.groupby('item_type').resample('D')['quantity'].sum()
dates = pd.date_range(
g.index.levels[0].min(), g.index.levels[0].max()
)
idx = pd.MultiIndex.from_product([g.index.levels[0], dates])

g.reindex(idx, fill_value=0)

543 2018-01-22 32
2018-01-23 0
2018-01-24 0
2018-01-25 0
2018-01-26 12
842 2018-01-22 0
2018-01-23 23
2018-01-24 0
2018-01-25 0
2018-01-26 0
Name: quantity, dtype: int64

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

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