将数据从一个 pandas 数据帧替换为另一个

2024-01-07

我有两个数据框 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

我尝试通过第一步连接两个 dfs 来开发逻辑,但这会导致行具有重复索引,并且不确定如何处理该问题。 如何才能实现这一目标?任何建议都会有所帮助

编辑:更简单的情况是两个数据框中的列名称相同。因此,考虑 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 http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.update.html将对齐两个 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将数据从一个 pandas 数据帧替换为另一个 的相关文章

随机推荐