簡體   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