我想要使用两种不同的dfs:
pd.concat([df1, df2], 1)
最终结果是以日期为索引和所有列的df。
According to pandas documentation,这应该有效。它工作正常。但现在它不是,我不明白为什么。
DF1:
gbp_open gbp_high gbp_low gbp_close gbp_volume
date
2017-03-13 0.8217 0.82246 0.81627 0.8216 000
2017-03-10 0.8224 0.82366 0.82055 0.82255 000
2017-03-09 0.82139 0.82364 0.82 0.8212 000
2017-03-08 0.81943 0.82372 0.8186 0.81937 000
2017-03-07 0.817 0.82163 0.8163 0.8168 000
2017-03-06 0.81351 0.81659 0.8132 0.813 000
2017-03-03 0.8147 0.81854 0.8141 0.81468 000
2017-03-02 0.81492 0.81561 0.81264 0.81485 000
2017-03-01 0.80779 0.81402 0.80629 0.80788 000
2017-02-28 0.80403 0.8059 0.80183 0.8039 000
和df2:
inr_open inr_high inr_low inr_close inr_volume
date
2017-03-13 66.485 66.58 66.11 66.485 000
2017-03-10 66.71 66.77 66.5398 66.6805 000
2017-03-09 66.815 66.853 66.60 66.765 000
2017-03-08 66.625 66.83 66.613 66.6162 000
2017-03-07 66.645 66.695 66.58 66.6647 000
2017-03-06 66.71 66.78 66.60 66.773 000
2017-03-03 66.845 66.885 66.74 66.8451 000
2017-03-02 66.69 66.858 66.67 66.858 000
2017-03-01 66.705 66.89 66.7046 66.7051 000
2017-02-28 66.735 66.808 66.59 66.6932 000
我尝试了几种不同的解决方案,但没有一种能够满足我的需求,这就是将这两种解决方案结合起来。
编辑:奇怪的是,我在不同的数据集上使用了完全相同的代码(但操作相同),并且它没有任何问题。
编辑2:也许这会有所帮助。我使用了df1.join(df2,how =' outer')并且它工作正常。那么几乎很好。当我检查任何重复值时,有一个日期显示四个(它恰好是昨天 - 这可以解释为什么它是最近的问题)。
这有助于解决这个问题吗?
xdf.index.value_counts()
2017-04-24 4
2016-11-14 1
2011-03-28 1
2011-09-19 1
2011-09-13 1
2013-12-25 1
2012-07-12 1
2011-08-08 1
2016-11-22 1
有什么想法吗?
答案 0 :(得分:0)
你的编辑基本上回答了这个问题:既然你的索引有多个相同的值,如果你想根据索引进行连接,那么如何对齐索引是不明确的,所以熊猫会引发错误:
所以这很有效,因为索引是唯一的:
df1 = pd.DataFrame(index=[0,1,2],columns=['A'],data=[19.,2.,-4.])
df2 = pd.DataFrame(index=[2,1,0],columns=['B'],data=[17.,28.,9.])
df3 = pd.concat(objs=[df1,df2],axis=1)
但是以下内容会引发与您相同的错误,因为不清楚这两个索引中的哪一个具有值" 1"从第一个数据帧开始,应与哪个索引的值对齐" 1"来自第二个数据框:
df3 = pd.DataFrame(index=[1,0,1],columns=['A'],data=[19.,2.,-4.])
df4 = pd.DataFrame(index=[0,1,1],columns=['B'],data=[17.,28.,9.])
df5 = pd.concat(objs=[df3,df4],axis=1)
尝试执行df5将为您提供InvalidIndexError:重新索引仅对您找到的唯一值Index对象有效。
答案 1 :(得分:0)
在为两个数据框都重叠之前尝试打印dataframe.index
。
如果不匹配,请使用reset_index()
重置索引。然后尝试串联。
它将起作用。