gpt4 book ai didi

python - 将数据从一个 Pandas 数据框替换为另一个

转载 作者:太空狗 更新时间:2023-10-30 00:49:21 24 4
gpt4 key购买 nike

我有两个数据帧 df1 和 df2 。它们都包含时间序列数据,因此 df1 和 df2 中的某些日期可能会相互交叉,而其余的则不会。我的要求是对两个数据帧进行操作,将相同日期的 df1 中的值替换为 df2 中的值,保留 df1 中不存在于 df2 中的索引值,并添加存在于 df2 而不是 df1 中的索引值。考虑以下示例:

df1:
A B C D
0 A0 BO C0 D0
1 A1 B1 C1 D1
2 A2 B2 C2 D2
3 A3 B3 C3 D3

df2:
A B C E
1 A4 B4 C4 E4
2 A5 B5 C5 E5
3 A6 B6 C6 E6
4 A7 B7 C7 E7

result df:
A B C D E
0 A0 BO C0 D0 Nan
1 A4 B4 C4 D4 E4
2 A5 B5 C5 D5 E5
3 A6 B6 C6 D6 E6
4 A7 B7 C7 D7 E7

我尝试通过连接两个 df 的第一步来开发逻辑,但这会导致行具有重复索引,我不确定如何处理它。如何实现?任何建议都会有所帮助

编辑:更简单的情况是两个数据框中的列名相同。因此,考虑 df2 具有 D 列而不是 E 列,其值为 D4、D5、D6、D7。

串联产生以下结果:

concat(df1,df2,axis=1)
A B C D A B C D
0 A0 B0 C0 D0 NaN NaN NaN NaN
1 A1 B1 C1 D1 A4 B4 C4 D4
2 A2 B2 C2 D2 A5 B5 C5 D5
3 A3 B3 C3 D3 A6 B6 C6 D6
4 NaN NaN NaN NaN A7 B7 C7 D7

现在这引入了重复的列。传统的解决方案是遍历每一列,但我正在寻找更优雅的解决方案。任何想法将不胜感激。

最佳答案

update将对齐两个 DataFrame 的索引:

df1.update(df2)

df1:
A B C D
0 A0 BO C0 D0
1 A1 B1 C1 D1
2 A2 B2 C2 D2
3 A3 B3 C3 D3

df2:
A B C D
1 A4 B4 C4 D4
2 A5 B5 C5 D5
3 A6 B6 C6 D6
4 A7 B7 C7 D7

>>> df1.update(df2)
A B C D
0 A0 BO C0 D0
1 A4 B4 C4 D4
2 A5 B5 C5 D5
3 A6 B6 C6 D6

然后您需要添加 df2 中不存在于 df1 中的值:

>>> df1.append(df2.loc[[i for i in df2.index if i not in df1.index], :])
Out[46]:
A B C D
0 A0 BO C0 D0
1 A4 B4 C4 D4
2 A5 B5 C5 D5
3 A6 B6 C6 D6
4 A7 B7 C7 D7

关于python - 将数据从一个 Pandas 数据框替换为另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30419040/

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