Pandas 数据帧上的部分索引匹配

问题描述 投票:0回答:1

我有两个 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。

pandas dataframe multi-index
1个回答
0
投票

获取常用名称:

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']

© www.soinside.com 2019 - 2024. All rights reserved.