合并同名列的两个Series后如何重命名Pandas DataFrame列
Pandas合并同名Series后分别重命名列的方法
你遇到的问题根源在于两个Series的列名完全相同,合并后DataFrame的列标签是重复的,使用列名映射重命名时会匹配所有同名列,导致同时修改。以下是几种可行的解决方法:
方法一:合并时直接指定列名(推荐)
在合并前先给每个Series重命名,或者利用concat的keys参数直接设置列名:
# 方式1:合并前重命名Series z = pd.concat([x.rename('Start'), y.rename('End')], axis=1) # 方式2:使用concat的keys参数 z = pd.concat([x, y], axis=1, keys=['Start', 'End']) # 若不需要多层列索引,可转为单层 z.columns = z.columns.get_level_values(0)
方法二:合并后直接赋值列名
如果确定合并后的列顺序是x在前、y在后,直接给columns属性赋值新名称即可:
z = pd.concat([x, y], axis=1) z.columns = ['Start', 'End']
方法三:通过位置映射重命名
如果需要保留原有列名逻辑,也可以结合列的位置进行重命名:
z = pd.concat([x, y], axis=1) z = z.rename(columns={z.columns[i]: name for i, name in enumerate(['Start', 'End'])})
为什么原方法失效?
原代码中z.columns[0]返回的是字符串'Timestamp',而rename的列映射会匹配所有等于该字符串的列,因此两列会被同时重命名为'Start',无法区分。
内容的提问来源于stack exchange,提问作者Niro Mal
相关产品推荐
相关产品推荐

