【发布时间】:2015-08-05 19:05:12
【问题描述】:
我有两个数据框 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
现在这引入了重复的列。传统的解决方案是遍历每一列,但我正在寻找更优雅的解决方案。任何想法将不胜感激。
【问题讨论】:
-
这个设置的问题是 DataFrames 不会在 D & E 列上对齐。
-
为简单起见,我们可以忽略列 E 并假设它们具有相同的列,如果 df2 的列是 D 而不是 E 的值为 D4-D7,那么如何实现此操作