python - 使用 pd.merge_asof() 时索引丢失
问题描述
我对 pd.merge_asof 和索引有疑问。
首先,我正在创建一个包含我需要的列/数据的数据框,然后按如下方式对其进行排序:
df1 = df[['A','B','C']].sort_values('B')
df1.head()
头部显示来自 df 的索引已结转到 df1(索引为日期)。
接下来我执行 pd.merge_asof 如下:
df2 = pd.merge_asof(df, df3, left_on='B', right_on='Z')
但是,如果我检查 df2 的头部,则日期索引现在丢失了。我需要将其转入 df2(来自 df/df1),因为我会将数据重新排序为日期顺序(这对我正在做的事情很重要)。
任何想法我可以如何以简单的方式做到这一点?
一如既往地感谢你!
保罗
解决方案
当您合并并且不合并原始索引的任何部分时,索引将失去其相关性。您连接来自不同 DataFrame 的行,那么您如何知道要选择哪个索引?
样本数据
import pandas as pd
df1 = pd.DataFrame({'foo': [1,2,3]}, index=list('abc'))
df2 = pd.DataFrame({'bar': [1,2,3]}, index=list('xyz'))
pd.merge_asof(df1, df2, left_on='foo', right_on='bar')
foo bar
0 1 1 # Should the index be 'a' or 'x'?
1 2 2 # 'b' or 'y'?
2 3 3 # 'c' or 'z'?
如果您需要索引在合并中出现,请通过将其设为一列来消除歧义reset_index
pd.merge_asof(df1.reset_index(), df2.reset_index(), left_on='foo', right_on='bar')
index_x foo index_y bar
0 a 1 x 1
1 b 2 y 2
2 c 3 z 3
推荐阅读
- server - 如何设置 virtualbox 以连接到外部互联网和 localhost.mysite.com 服务器?
- xml - 如何在本地机器上使用在远程机器上设置的变量
- powershell - 整数在 foreach 循环中递增 2 次
- angular - 示例使用 ng serve 的 broswerTarget 选项?
- r - 如何在条件行之前提取字段
- html - 单击时从按钮中删除轮廓
- reactjs - 使用 React,我如何从自定义函数内部更新状态?
- html - 将相同的 z-index 与相同的 top:0 位置堆叠在一起
- ios - 从 iOS 快捷方式中的文本创建日期
- node.js - 如何使用 NodeJS 抓取 JSON 文件