如何在Pandas数据框中对同名多列执行逆透视(Unpivot)操作?
解决重复列名的Pandas数据框逆透视问题
当然可以实现这种转换!针对你这种带有重复列名的DataFrame,我们可以用Pandas的内置操作快速完成需求。
首先,先还原你给出的示例数据(因为重复列名在构造时需要注意,Pandas会自动处理重复列名的显示):
import pandas as pd # 构造你的原始数据框 df = pd.DataFrame({ 'pp': [5, 5], 'b': [0.001464, 0.001459], 'pp': [6, 6], 'b': [0.001853, 0.001843] })
方法一:按列名分组后纵向拼接
这是最直接的方法,核心思路是提取每个唯一列名对应的所有列,然后把它们纵向拼接起来:
# 获取所有唯一列名 unique_cols = df.columns.unique() # 按列名分组提取并拼接 result = pd.concat([df[col] for col in unique_cols], axis=0).reset_index(drop=True)
执行后得到的result就是你期望的输出:
pp b 0 5.0 0.001464 1 5.0 0.001459 2 6.0 0.001853 3 6.0 0.001843
方法二:转置后分组展开(备选)
如果你想尝试另一种思路,可以先转置数据框,按列名分组后展开数据,再重新整理结构:
# 转置数据框 df_transposed = df.T # 添加列名标识列 df_transposed['column_name'] = df_transposed.index # 分组后展开所有值,再重新整理结构 result = df_transposed.groupby('column_name')\ .apply(lambda x: x.values.flatten())\ .explode()\ .unstack('column_name')\ .reset_index(drop=True)
这个方法同样能得到相同的结果,适合理解数据结构的转换逻辑。
内容的提问来源于stack exchange,提问作者user308827
相关产品推荐
相关产品推荐

