使用groupby().agg()后如何重命名DataFrame的列名?
解决Pandas多级列名重命名问题
你的问题出在:rename里用了字符串形式的元组(比如"('name_d', '')")作为匹配键,但DataFrame的列名实际是元组对象,不是字符串,所以完全匹配不上,导致重命名失效。
下面是三种可行的解决方法:
方法一:直接替换列名列表
既然你已经明确列的顺序,直接给columns赋值新的列名列表最直接:
bilateral.columns = ['name_d', 'year', 'regime_origin', 'FLOW', 'GDP_d']
方法二:用元组作为rename的匹配键
把原来的字符串键换成真实的元组对象,就能精准匹配到对应的多级列:
bilateral.rename(columns={ ('name_d', ''): 'name_d', ('year', ''): 'year', ('regime_origin', ''): 'regime_origin', ('FLOW', 'sum'): 'FLOW', ('GDP_d', 'min'): 'GDP_d' }, inplace=True)
方法三:聚合时直接指定列名(推荐)
在agg阶段就直接定义好最终列名,从根源避免生成多级列,更高效:
bilateral = bilateral.groupby(["name_d", "year", "regime_origin"]).agg( FLOW=("FLOW", "sum"), GDP_d=("GDP_d", "min") ).reset_index()
这样执行后得到的DataFrame列名就是普通的单级列,无需后续重命名操作。
内容的提问来源于stack exchange,提问作者user19562955
相关产品推荐
相关产品推荐

