gpt4 book ai didi

Python 在时间序列数据框中填充零并保留现有值

转载 作者:太空宇宙 更新时间:2023-11-04 02:00:05 24 4
gpt4 key购买 nike

我有一个日期列表和一个数据框。现在数据框有一个 id 列和其他所有日期都不一致的值。我想在没有数据的 ID 和日期的所有列中填充零。让我通过示例向您展示:

      date     id     clicks    conv    rev
2019-01-21 234 34 1 10
2019-01-21 235 32 0 0
2019-01-24 234 56 2 20
2019-01-23 235 23 3 30

日期列表是这样的:

     [2019-01-01, 2019-01-02,2019-01-03 ....2019-02-28]

我想要的是为所有 ID 的数据框中的所有缺失日期添加零。所以生成的 df 应该是这样的:

    date     id     clicks    conv    rev
2019-01-01 234 0 0 0
2019-01-01 235 0 0 0
. . . .
. . . .

2019-01-21 234 34 1 10
2019-01-21 235 32 0 0
2019-01-22 234 0 0 0
2019-01-22 235 0 0 0
2019-01-23 234 0 0 0
2019-01-23 235 0 0 0
2019-01-24 234 56 2 20
2019-01-23 235 23 3 30
. . . .
2019-02-28 0 0 0 0

最佳答案

使用DataFrame.reindex使用 MultiIndex,还需要将 list 和列 date 转换为 datetime:

dates = ['2019-01-01', '2019-01-21','2019-01-22','2019-01-23', '2019-01-24']

mux = pd.MultiIndex.from_product([pd.DatetimeIndex(dates),
df['id'].unique()], names=['date','id'])

df['date'] = pd.to_datetime(df['date'])
df = df.set_index(['date','id']).reindex(mux, fill_value=0).reset_index()

print (df)
date id clicks conv rev
0 2019-01-01 234 0 0 0
1 2019-01-01 235 0 0 0
2 2019-01-21 234 34 1 10
3 2019-01-21 235 32 0 0
4 2019-01-22 234 0 0 0
5 2019-01-22 235 0 0 0
6 2019-01-23 234 0 0 0
7 2019-01-23 235 23 3 30
8 2019-01-24 234 56 2 20
9 2019-01-24 235 0 0 0

验证数据类型:

print (df['date'].dtype)
datetime64[ns]
print (mux.levels[0].dtype)
datetime64[ns]

关于Python 在时间序列数据框中填充零并保留现有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55892617/

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