繁体   English   中英

如何映射/加入多索引 pandas DataFrame 的某些索引列?

[英]How to map/join some index column of a multiindex pandas DataFrame?

假设我有一个带有多索引 ['siec', 'geo'] 的 DataFrame df (以斜体显示):

赛克 地理 价值
一个 1
一个 FR 2

和一个映射 DataFrame mapping_dfgeoid_region具有单个索引 ['geo']:

地理 id_region
10
FR 20

=> 如何将df的索引列 'geo' 加入/合并/替换为 mapping_df 中的列 ' mapping_df ' 的值?

新的多索引 ['siec', 'id_region'] 的预期结果

赛克 id_region 价值
一个 10 1
一个 20 2

我尝试了以下代码:

import pandas as pd

df = pd.DataFrame([{'siec': 'a', 'geo': 'DE', 'value': 1}, {'siec': 'a', 'geo': 'FR', 'value': 1}])
df.set_index(['siec', 'geo'], inplace=True)

mapping_df = pd.DataFrame([{'geo': 'DE', 'id_region': 10}, {'geo': 'FR', 'id_region': 20}])
mapping_df.set_index(['geo'], inplace=True)

joined_data = df.join(mapping_df)

merged_data = df.merge(mapping_df, left_index=True, right_index=True)

但它不符合我的要求。 它添加了一个附加列并保留旧索引。

赛克 地理 价值 id_region
一个 1 10
一个 FR 2 20

=> 是否有适合我的用例的便捷方法,或者我需要在加入步骤后手动更正索引?

作为一种解决方法,我可以reindex() DataFrames,进行一些连接操作,然后重新引入一些多索引。

但是,如果可能的话,我想避免在索引和非索引版本的 DataFrames 之间来回切换(?)。

尝试如下。

df.index = df.index.set_levels(
    df.index.get_level_values(1).map(mapping_df['id_region']), level=1)\
    .set_names('id_region', level=1)

print(df)

                value
siec id_region       
a    10             1
     20             2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM