gpt4 book ai didi

python - 如何合并数据框和填充值

转载 作者:行者123 更新时间:2023-12-02 16:20:41 24 4
gpt4 key购买 nike

我正在尝试合并下面的 2 个 DataFrame 以获得输出,其中每个日期都列出了每个代码,如果代码在该日期不在原始 DataFrame 中,则数量填充为 0。我在下面给出了我的输入和所需输出的示例,但我的实时数据将包含超过一年的日期和超过 20,000 个代码。

输入数据:

df1

    date
0 2021-05-03
1 2021-05-04
2 2021-05-05
3 2021-05-06
4 2021-05-07
5 2021-05-08
6 2021-05-09
7 2021-05-10

df2

    date      code  qty
0 2021-05-03 A 2
1 2021-05-06 A 5
2 2021-05-07 A 4
3 2021-05-08 A 5
4 2021-05-10 A 6
5 2021-05-04 B 1
6 2021-05-08 B 4

期望的输出:

date      code  qty
03/05/2021 A 2
03/05/2021 B 0
04/05/2021 A 0
04/05/2021 B 1
05/05/2021 A 0
05/05/2021 B 0
06/05/2021 A 5
06/05/2021 B 0
07/05/2021 A 4
07/05/2021 B 0
08/05/2021 A 5
08/05/2021 B 4
09/05/2021 A 0
09/05/2021 B 0
10/05/2021 A 6
10/05/2021 B 0

我已经尝试了下面的合并,但我得到的输出似乎并不如我所愿:

df_new = df1.merge(df2, how='left', on='date')


date code qty
0 2021-05-03 A 2.0
1 2021-05-04 B 1.0
2 2021-05-05 NaN NaN
3 2021-05-06 A 5.0
4 2021-05-07 A 4.0
5 2021-05-08 A 5.0
6 2021-05-08 B 4.0
7 2021-05-09 NaN NaN
8 2021-05-10 A 6.0

最佳答案

这更适合于 reindex。您创建所有组合,设置索引,重新索引所有这些组合,填充然后重置索引。

import pandas as pd

idx = pd.MultiIndex.from_product([df1.date, df2['code'].unique()],
names=['date', 'code'])

df2 = (df2.set_index(['date', 'code'])
.reindex(idx)
.fillna(0, downcast='infer')
.reset_index())

          date code  qty
0 2021-05-03 A 2
1 2021-05-03 B 0
2 2021-05-04 A 0
3 2021-05-04 B 1
4 2021-05-05 A 0
5 2021-05-05 B 0
6 2021-05-06 A 5
7 2021-05-06 B 0
8 2021-05-07 A 4
9 2021-05-07 B 0
10 2021-05-08 A 5
11 2021-05-08 B 4
12 2021-05-09 A 0
13 2021-05-09 B 0
14 2021-05-10 A 6
15 2021-05-10 B 0

关于python - 如何合并数据框和填充值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65580925/

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