问题描述
我有两个数据框,每个数据框具有49个分层的多索引(由浮点数,字符串,np.nan等组成),并且我试图找到这些multindexe的交集。我最初的方法是:
df3 = df1.loc[df2.index]
这给了我近100%的匹配率,与我的预期差不多。但是使用这种方法,熊猫发出了警告
未来警告:
将类似列表的标签传递给.loc或[]且缺少标签会引发
将来出现KeyError时,可以使用.reindex()作为替代。
请参阅此处的文档:
https://pandas.pydata.org/pandas-docs/stable/indexing.html#deprecate-loc-reindex-listlike
因此,按照文档中最适合我的目的的建议,我重新实现了以下解决方案:
df3 = df1.loc[df1.index.intersection(df2.index)]
但是,这实现了不到10%的匹配率。
我知道交集方法缺少预期的索引匹配。我通过以下方法对此进行了验证
df1.index[0] in df2.index[0:1] # returns true
而
df1.index[0:1].intersection(df2.index[0:1]) # returns empty
.loc如何在相交无法达到的几乎相等的时间内达到合适的匹配数?在仍然证明未来的同时,如何复制.loc的性能?
对于上下文,我从两个具有49个公共列的日期时间索引数据帧开始。一个数据帧中的数据几乎是另一个数据帧中的数据的子集(它可能具有一些其他数据)。同样,不能保证它们的索引顺序匹配。我正在尝试使用子集数据帧的日期时间索引作为较大数据帧中等效数据行的参考时间。解决此问题的方法也必须高效。对于解决此问题的其他方法,我也将不胜感激。
编辑:我避免使用reindex,因为我的索引是重复的,但是我意识到我可以使用它来找到索引交点,如下所示:
temp_df = df1[~df1.index.duplicated()].reindex(df2.index.drop_duplicates())
index_intersection = temp_df[temp_df.someColumn.notnull()].index
df3 = df1.loc[index_intersection]
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)