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

joh*_*ith 5 python pandas

我有两个数据帧df1和df2.它们都包含时间序列数据,因此df1和df2中的某些日期可能相互交叉,其余日期则不相交.我的要求是对两个数据帧的操作,用df2中的值替换df1中的值,df2中的索引值在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
Run Code Online (Sandbox Code Playgroud)

我尝试开发逻辑,第一步连接两个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
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*der 6

update 将与两个DataFrames的索引对齐:

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
Run Code Online (Sandbox Code Playgroud)

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

>>> 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
Run Code Online (Sandbox Code Playgroud)