如何拆分pandas DataFrame的国家_地区列名以按国家调取对应列
实现方法
以下两种方案都可以满足需求,可根据是否需要修改原表结构选择:
方案1:使用Pandas多层列索引(最规范)
直接修改DataFrame的列结构为层级索引,原生支持按国家名直接索引对应所有列,无需额外辅助变量。
操作代码
import pandas as pd # 你的原始DataFrame df = pd.DataFrame([], columns = 'usa_alaska usa_california france_paris italy_roma france_lyon'.split()) # 拆分列名,设置双层列索引 df.columns = df.columns.str.split('_', n=1, expand=True).set_names(['国家', '地区'])
使用示例
# 直接调用国家名获取所有对应地区列 df['france'] # 同时获取多个国家的所有列 df[['usa', 'italy']] # 也支持精准定位到某个国家的某个地区列 df['usa', 'california']
方案2:构建国家-列名映射字典(不修改原表结构)
如果不想改动原始DataFrame的列名,可以自己生成一个映射字典,调用时通过字典取对应列即可。
操作代码
from collections import defaultdict # 构建国家到对应列名的映射 country_col_map = defaultdict(list) for col in df.columns: # n=1保证只拆分第一个下划线,避免地区名自带下划线时拆分错误 country, _ = col.split('_', n=1) country_col_map[country].append(col)
使用示例
# 传入字典对应的国家值即可拿到所有对应列 df[country_col_map['france']]
注意事项
拆分列名时指定n=1参数是为了兼容地区名本身包含下划线的场景(比如usa_new_york),只会拆分第一个下划线避免出错。
内容的提问来源于stack exchange,提问作者Khaled Hamdy
相关产品推荐
相关产品推荐

