在时间序列索引下连接pandas数据框而不重复列
我想把两个 pandas 数据框(DataFrame)合并在一起,这两个数据框都有时间序列的索引,可能会有重叠的部分,而且它们的列名也可能会重复。
举个例子:
old_close new_close
1TM ABL ... ABL ANG ...
Date Date
2009-06-05 100 564 1990-06-08 120 2533
2009-06-04 102 585 1990-06-05 121 2531
2009-06-03 101 532 1990-06-04 123 2520
2009-06-02 99 540 1990-06-03 122 2519
2009-06-01 99 542 1990-06-02 121 2521
...
我想把 old_close 和 new_close 合并成一个新的数据框,这个新数据框要包含两个数据框里的所有数据,但要排除所有重复的索引值。
到目前为止,我是这样做的:
merged_close = pd.concat([old_close, new_close], axis=1)
但是这样做会导致出现重复的列(在轴 0 上是重复的行)和一个多重索引。
2 个回答
0
来自 Pandas 文档:
concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,
keys=None, levels=None, names=None, verify_integrity=False)
verify_integrity
:这是一个布尔值,默认是False
。这个参数用来检查新合并的轴(数据的某个维度)是否包含重复项。相较于实际的数据合并,这个检查可能会消耗很多资源。
你有没有试过把这个参数设置为 True
?
编辑:
抱歉,verify_integrity
如果发现有重复项会直接报错。无论如何,你可以试试 drop_duplicates() 这个函数。
顺便看看这个问题:
2
假设你想要“排除两个索引上的所有重复值”,那么这个方法应该可以用
unique_indices = np.setdiff1d(np.unioin1d(old_close.index.to_list(), new_close.index.to_list()),
np.intersect1d(old_close.index.to_list(), new_close.index.to_list()))
merged_close = pd.concat([old_close, new_close]).ix[unique_indices]
编辑:更新了唯一索引的计算。现在所有重复的索引都被去掉了