我有两个具有不同多重索引的熊猫数据帧df1
和df2
。我想根据上一个索引级别对齐两个数据框。较短的数据框规则,即所有不在较短数据框中的日期都应从较长的数据框中删除。
如果我降低前两个索引级别,则会得到想要的结果。但是,我想保留完整的多索引。
import numpy as np
import pandas as pd
idx1_l1 = np.tile("provider_1", 31)
idx2_l1 = np.tile("provider_2", 22)
idx1_l2 = np.tile("indicator_1", 31)
idx2_l2 = np.tile("indicator_2", 22)
idx1_l3 = pd.date_range(start="2020-01-01", end="2020-01-31")
idx2_l3 = pd.date_range(start="2020-01-10", end="2020-01-31")
data1 = np.random.randint(low=1, high=100, size=31)
data2 = np.random.randint(low=1, high=100, size=22)
df1 = pd.DataFrame(data=data1, index=[idx1_l1, idx1_l2, idx1_l3])
df2 = pd.DataFrame(data=data2, index=[idx2_l1, idx2_l2, idx2_l3])
df1, df2 = df1.droplevel([0, 1]).align(df2.droplevel([0, 1]), join="inner", axis=0)
答案 0 :(得分:1)
您可以通过intersection
创建所需级别(在您的情况下为2)的新索引,然后选择带有get_indexer
的行:
idx = df1.index.get_level_values(2).intersection(df2.index.get_level_values(2))
df1 = df1.iloc[df1.index.get_level_values(2).get_indexer(idx)]
df2 = df2.iloc[df2.index.get_level_values(2).get_indexer(idx)]