У меня есть следующие фреймы данных 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. Как я могу добиться этого эффективно в pandas?
Я пытался:
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
Любая помощь очень ценится !!