我有两个 pandas 数据框
import pandas as pd
# Sample MultiIndex
data1 = {
'value': [10, 20, 30, 40, 50, 60],
'level_3': ['alpha','beta','gamma','delta','kappa','omega'],
'level_1': [1, 2, 3, 4, 5, 6]
}
df1 = pd.DataFrame(data)
df1.set_index(['level_1', 'level_2','level_3'], inplace = True)
print(df1)
value level_1 level_2 level_3 1 A alpha 10 2 B beta 20 3 C gamma 30 4 D delta 40 5 E kappa 50 6 F omega 60
第二个数据框是这样的
data2 = {
'value': [300, 200],
'level_5': ['jersey','michigan'],
'level_2': ['A', 'B'],
'level_1': [1, 2]
}
df2 = pd.DataFrame(data2)
df2.set_index(['level_1', 'level_2','level_5'], inplace = True)
print(df2)
value level_1 level_2 level_5 1 A jersey 300 2 B michigan 200
现在我将 df2 的索引放入变量中
idxs2 = df2.index
print(idxs2)
MultiIndex([(1, 'A', 'jersey'), (2, 'B', 'michigan')], names=['level_1', 'level_2', 'level_5'])
我需要首先找到 df1 和 df2 共有的索引名称(即“level_1”和“level_2”),然后从 df2 借用到 df1 的值。我事先不知道哪些索引名称是常见的。在这种情况下,df1 行 (1,"A") 和 (2,"B") 应设置为 300 和 200。
获取常用名称:
out = set(df1.index.names)&set(df2.index.names)
输出:
{'level_1', 'level_2'}
或者按顺序排列它们:
out ) [n for n in df1.index.names if n in set(df2.index.names)]
输出:
['level_1', 'level_2']