[英]How to map/join some index column of a multiindex pandas DataFrame?
假设我有一个带有多索引 ['siec', 'geo'] 的 DataFrame df
(以斜体显示):
赛克 | 地理 | 价值 |
---|---|---|
一个 | 德 | 1 |
一个 | FR | 2 |
和一个映射 DataFrame mapping_df
从geo
到id_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 之间来回切换(?)。
尝试如下。
MultiIndex.get_level_values
用于 select 仅级别1
(或: geo
)并应用Index.map
和mapping_df['id_region']
作为映射器。MultiIndex.set_levels
中以覆盖级别1
。Index.set_names
重命名关卡(或使用MultiIndex.rename
)。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.