Pandas按指定后缀列分组绘图问题求助
解决按列名后缀分组绘图的问题,顺便优化你的数据合并逻辑
嘿,咱们先聊聊你现有的代码处理,再一步步解决绘图的需求~
先看你现有处理的小优化点
你的列重命名逻辑是完全可行的,但合并数据框的写法可以更简洁——嵌套merge的可读性差一点,改成链式merge会更清晰:
# 简化合并逻辑,可读性更强 merge_df = salaried_df.merge(selfemployed_df, on='country', how='inner')\ .merge(gdp_df, on='country', how='inner')
另外要注意:合并后记得检查country列有没有重复值,避免后续绘图出现混乱,用merge_df['country'].duplicated().any()就能快速验证。
按列名后缀(_S/_GDP/_SE)分组绘图的实现
首先得把目标列筛选出来,再按后缀分组,最后选择合适的绘图方式(这里用matplotlib和pandas内置绘图举例,你也可以用seaborn美化)。
步骤1:筛选目标列
先把包含指定后缀的列挑出来,排除country列:
# 筛选所有带_S/_GDP/_SE的列 target_cols = [col for col in merge_df.columns if any(suffix in col for suffix in ['_S', '_GDP', '_SE'])]
步骤2:按后缀分组列
把列按后缀分成三类,给每组起个易懂的名称,方便后续绘图管理:
# 按后缀分组,给每组起个易懂的名称 column_groups = { '工薪阶层占比 (%)': [col for col in target_cols if '_S' in col], '自雇人士占比 (%)': [col for col in target_cols if '_SE' in col], '人均GDP': [col for col in target_cols if '_GDP' in col] }
步骤3:分组绘图(示例:每个指标组的国家对比图)
如果想给每个指标组单独绘图,展示不同国家的数值对比,柱状图是个不错的选择:
import matplotlib.pyplot as plt # 创建子图,每组指标一个子图 fig, axes = plt.subplots(nrows=len(column_groups), figsize=(12, 18)) # 遍历每个分组,绘制图表 for ax, (group_name, cols) in zip(axes, column_groups.items()): # 绘制柱状图,x轴是国家,y轴是该组的所有列(比如各年份的数值) merge_df.plot(x='country', y=cols, kind='bar', ax=ax) ax.set_title(group_name, fontsize=14) ax.set_ylabel('数值', fontsize=12) # 旋转x轴标签,避免重叠 ax.tick_params(axis='x', rotation=60, labelsize=10) # 自动调整子图间距 plt.tight_layout() plt.show()
另一种场景:按年份分组,对比同一年份的三个指标
如果你的列名格式是2020_S、2020_SE、2020_GDP这种(年份+后缀),可以按年份分组,对比每个年份不同国家的三个指标:
# 提取所有年份(从列名中拆分) years = sorted({col.split('_')[0] for col in target_cols}) fig, axes = plt.subplots(nrows=len(years), figsize=(12, 18)) for ax, year in zip(axes, years): # 找到该年份对应的所有列 year_cols = [col for col in target_cols if col.startswith(year)] merge_df.plot(x='country', y=year_cols, kind='bar', ax=ax) ax.set_title(f'{year}年 各指标对比', fontsize=14) ax.set_ylabel('数值', fontsize=12) ax.tick_params(axis='x', rotation=60, labelsize=10) plt.tight_layout() plt.show()
额外提示
- 如果你的数据是时间序列(按年份变化),把柱状图换成折线图(
kind='line')会更直观。 - 可以用
seaborn的catplot或者barplot来做更美观的分组可视化,逻辑和上面一致,只是绘图函数不同。
内容的提问来源于stack exchange,提问作者Archie
相关产品推荐
相关产品推荐

