gpt4 book ai didi

python - 使用前向填充缺失日期为每个 ID 添加每日数据

转载 作者:太空宇宙 更新时间:2023-11-03 14:05:48 26 4
gpt4 key购买 nike

我有一个 pandas 数据框,如下所示:

    id   date    value  name
0 C1 2017-01-01 31 Company 1
1 C1 2017-01-02 35 Company 1
2 C1 2017-01-03 32 Company 1
3 C1 2017-01-06 36 Company 1
4 C1 2017-01-07 35 Company 1
5 C1 2017-01-08 34 Company 1
6 C1 2017-01-10 33 Company 1
7 C2 2017-01-01 225 Company 2
8 C2 2017-01-02 223 Company 2
9 C2 2017-01-03 223 Company 2
10 C2 2017-01-06 220 Company 2
11 C2 2017-01-07 222 Company 2
12 C2 2017-01-08 225 Company 2
13 C2 2017-01-10 224 Company 2
14 C3 2017-01-08 340 Company 3

对于此数据框,日期范围为 start_date 2017-01-01end_date 2017-01-10,包括两者。这就是这两个日期之间的所有数据。

我想为缺失的日期添加新行。例如对于 id C1value 列中有缺失值 2017-01-04,2017-01-05,2017-01-09 并且新行应按如下方式添加,并在 value 列中添加 0

 C1 2017-01-04 0 Company1
C1 2017-01-05 0 Company1
C1 2017-01-09 0 Company1

C2类似,列中有2017-01-04、2017-01-05、2017-01-09的缺失值C3 缺少 2017-01-01 到 2017-01-07 和 2017-01-09,2017-01-10 的值/p>

我正在努力弄清楚如何使用 Pandas 执行添加这些行的操作。所以,只是寻求一些帮助。

最佳答案

一个选项是使用 pandas.date_range 创建您想要完成的所有日期,然后您可以在完整日期之间进行外部连接,每个子数据框都以 date 列,最后用 0 填充缺失值:

# create complete dates
dates = pd.DataFrame({"date": pd.date_range("2017-01-01", "2017-01-10")})

# convert date column to date time if it's not already
df['date'] = pd.to_datetime(df.date)

# merge complete dates with each sub data frame separately using groupby.apply
(df.groupby(['id', 'name'])['date', 'value']
.apply(lambda g: g.merge(dates, how="outer"))
.fillna(0)
.reset_index(level=[0,1])
.reset_index(drop=True))

# id name date value
#0 C1 Company 1 2017-01-01 31.0
#1 C1 Company 1 2017-01-02 35.0
#2 C1 Company 1 2017-01-03 32.0
#3 C1 Company 1 2017-01-06 36.0
#4 C1 Company 1 2017-01-07 35.0
#5 C1 Company 1 2017-01-08 34.0
#6 C1 Company 1 2017-01-10 33.0
#7 C1 Company 1 2017-01-04 0.0
#8 C1 Company 1 2017-01-05 0.0
#9 C1 Company 1 2017-01-09 0.0
# ...

关于python - 使用前向填充缺失日期为每个 ID 添加每日数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43579031/

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