如何使用一个数据框的内容来索引另一个多级索引数据框?

时间:2020-03-04 16:26:57

标签: python pandas multi-index

我有以下数据帧let auth0 = null; const isAuthenticated = await auth0.isAuthenticated(); if(!isAuthenticated) { console.log('Not Authenticated, redirecting to login page'); await auth0.loginWithRedirect({ redirect_uri: window.location.href }); } else { console.log('Authenticated'); } 和`site_2_df(两者相似):

int64_t order_preserving_repr(double x) { int64_t k; memcpy(&k, &x, sizeof k); if (k<0) k ^= INT64_MAX; return k; }

enter image description here

以及以下数据框:

site_1_df

site_1_df

enter image description here

因此,很明显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_1_df进行索引,那么我想要同一数据框中的行的子集。从技术上讲,我应该取回一个具有(8556行x 6列),即index_intersection的行数相同的数据框。如何在熊猫中有效地实现这一目标?

我尝试过:

site_2_df

我得到了:

enter image description here

但是,使用另一个数据帧为该数据帧建立索引,例如:

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

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

所以我发现可以通过以下两个索引找到两个数据帧的交集:

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,因为这从一个数据帧到另一个数据帧完全不同。因此,我能够从它们的索引中找到两个数据框之间的内部联接。