[英]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.