我有两个数据框 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(使用前将#替换为@)