我有以下数据帧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;
}
:
以及以下数据框:
site_1_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_1_df进行索引,那么我想要同一数据框中的行的子集。从技术上讲,我应该取回一个具有(8556行x 6列),即index_intersection的行数相同的数据框。如何在熊猫中有效地实现这一目标?
我尝试过:
site_2_df
我得到了:
但是,使用另一个数据帧为该数据帧建立索引,例如:
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
非常感谢任何帮助!
答案 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,因为这从一个数据帧到另一个数据帧完全不同。因此,我能够从它们的索引中找到两个数据框之间的内部联接。