无法在 Pandas 中将数据框拼接。

3

我有两个数据框。第一个数据框是多级索引,而另一个则是典型的单级索引。

enter image description here

图1:多级索引数据框

enter image description here

图2:单一索引

当我将这两个数据框连接起来时,出现了以下错误:

无法连接没有重叠索引名称的数据框

我怀疑这个错误是由第一个数据框(图1)中的索引列名称引起的。

即使交换索引名称和典型的数字值也没有帮助。

enter image description here

图2:多级索引数据框

请问如何解决此错误?

感谢您抽出时间。


默认情况下,Join 会在相同的索引上进行合并。你能展示一下你的第二个数据框吗? - adrianp
嗨,感谢您的回应。我已经按图2所示附上了它 @adrianp - mpx
1
你能给我们展示一下你的代码吗?也许使用 merge 可能更合适,因为我认为你没有完全相同的索引。 - KWx
1
请勿发布数据集的屏幕截图,而是将文本数据复制/粘贴到问题中。 - Quang Hoang
1
请提供更多信息。 - philipxy
2个回答

7

merge之前,您可以将MultiIndex的第一层转换为列:

df = (df1.reset_index(level=0)
         .merge(df2, left_index=True, right_index=True)
         .set_index('name', append=True)
         .swaplevel(1, 0))

或者如果使用join:

df = df1.reset_index(level=0).join(df2).set_index('name', append=True).swaplevel(1, 0)

谢谢您的回复。按照您的建议,我只剩下一个单索引的 df 了吗?那么我该如何保持多重索引呢? - mpx
1
@polosepian - 然后需要创建MultiIndex,答案已经被编辑。 - jezrael
感谢Jezrael的帮助,非常感激。 - mpx

1
如果您尝试执行类似于df.rolling(window).cov()/df.rolling(window).var()的函数,其中您正在尝试基本上合并两个多索引数据帧,那么我遇到的问题是必须指定索引的名称,因为它不知道匹配的索引名称,这就是为什么您会得到此错误的原因。如果您使用像yfin这样的东西获取数据,则不会遇到此问题,因为索引始终默认为“日期”。以下是一个简单的一行代码来解决此问题:

df.index.rename('Date', inplace=True)

1
你的回答目前不太清晰。请 [编辑] 添加更多细节,以帮助其他人了解它如何回答所提出的问题。你可以在帮助中心找到有关编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接