无法加入熊猫中的数据框

Posted

技术标签:

【中文标题】无法加入熊猫中的数据框【英文标题】:Unable to join to dataframe in pandas 【发布时间】:2020-02-02 09:11:30 【问题描述】:

我有两个 df。第一个df是多索引,另一个是典型的单索引。

图 1:多索引 df

图 2:单一索引

加入这两个df后,出现以下错误

不能在没有重叠索引名称的情况下加入

我怀疑,这个错误是由于第一个 df 中的索引列 name 造成的(图 1)。

甚至,交换索引名称和典型数值也无济于事

图 2:多索引 df

我可以知道如何解决这个错误吗?

提前感谢您花费的时间

【问题讨论】:

默认情况下在相同索引上合并。您也可以显示您的第二个数据框吗? 您好,感谢您的回复。我附上了它,如图 2 所示 @adrianp 你能告诉我们你的代码吗?也许merge 可能合适,因为我认为您的索引不同。 不要发布数据集的屏幕截图,而是将文本数据复制/粘贴到问题中。 请minimal reproducible example。 【参考方案1】:

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

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

或者如果使用连接:

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

【讨论】:

感谢您的回复。根据您的建议,我留下了一个单一的索引 df 呢?如何维护多索引? @polosepian - 然后有必要创建 MultiIndex,答案已编辑。 感谢 Jezrael 的帮助,不胜感激【参考方案2】:

如果您尝试执行诸如 df.rolling(window).cov()/df.rolling(window).var() 之类的功能,您尝试基本上合并两个多索引数据帧,我发生了什么我是否必须为索引指定一个名称,因为它不知道要匹配的索引名称,这就是您收到此错误的原因。如果您使用 yfin 之类的东西来获取数据,则不会遇到此问题,因为索引始终默认为“日期”。这是解决此问题的简单单行代码:

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

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于无法加入熊猫中的数据框的主要内容,如果未能解决你的问题,请参考以下文章

根据列值加入熊猫数据框

熊猫:加入有条件的数据框

根据线序加入两个熊猫数据框

熊猫枢轴并加入两个数据框

While循环加入熊猫数据框

熊猫 - 按时间接近加入