python - 如何使用一个数据框的内容来索引另一个多级索引数据框?
问题描述
我有以下数据site_1_df
框和`site_2_df(两者相似):
site_1_df
:
以及以下数据框:
site_1_index_df = pd.DataFrame(site_1_df.index.values.tolist(), columns=["SiteNumber", "WeekNumber", "PG"])
site_2_index_df = pd.DataFrame(site_2_df.index.values.tolist(), columns=["SiteNumber", "WeekNumber", "PG"])
index_intersection = pd.merge(left=site_1_index_df, right=site_2_index_df,
on=["WeekNumber", "PG"], how="inner")[["WeekNumber", "PG"]]
index_intersection
:
因此,很明显site_1_df
和site_2_df
是多级索引数据帧。因此,我想使用index_intersection
来索引上述数据框。或者,如果我从 site_1_df 建立索引,那么我想要来自同一数据帧的行的子集。从技术上讲,我应该取回一个具有(8556 行 x 6 列)的数据框,即 index_intersection 的行数相同。我怎样才能在熊猫中有效地实现这一目标?
我试过了:
index_intersection = pd.merge(left=site_1_index_df, right=site_2_index_df,
on=["WeekNumber", "PG"], how="inner")[["SiteNumber_x", "WeekNumber", "PG"]]
index_intersection = index_intersection.rename(columns={"SiteNumber_x": "SiteNumber"})
index_intersection = index_intersection.set_index(["SiteNumber", "WeekNumber", "PG"])
index_intersection
我得到了:
但是,使用另一个数据帧索引数据帧,例如:
site_2_df.loc[index_intersection]
# or
site_2_df.loc[index_intersection.index]
# or
site_2_df.loc[index_intersection.index.values]
会给我一个错误:
NotImplementedError: Indexing a MultiIndex with a DataFrame key is not implemented
任何帮助深表感谢!!
解决方案
所以我发现我可以根据它们的索引找到2个数据帧的交集:
sites_common_rows = pd.merge(left=site_1_df.reset_index([0]), right=site_2_df.reset_index([0]),
left_index=True, right_index=True, how="inner")
以上reset_index([0])
用于忽略 SiteNumber,因为这与一个数据帧完全不同。因此,我能够从它们的索引中找到两个数据帧之间的内部连接。
推荐阅读
- android - Android 11 未在应用程序中显示 WhatsApp 状态。/storage/emulated/0/Android/media/com.whatsapp/WhatsApp/Media/.Statuses/ 文件夹显示空结果
- python - 无法使用 torch.save() 将模型保存到 gs 存储桶
- javascript - Ruby on Rails - 我有来自 Heroku 的 H27 错误
- javascript - 如何通过单击打印多个子组件页面?
- reactjs - 如何将表单与其结果联系起来
- azure - KQL 时间表可视化显示特定资源随时间的总数
- python - Boto SQS 获取大量消息
- arrays - 当复选框未选中时,我想返回我的所有列表
- bash - 在 ENTRYPOINT 中运行 bash 脚本:exec 用户进程导致:exec 格式错误
- angular8 - 如何在 Angular 12 的 App 模块上方创建一个模块?