如何将多行DataFrame转换为带ID前缀的单行多列格式?
Pandas实现多行DataFrame转单行多列(带ID前缀)
嘿,这个需求我刚好处理过,用Pandas的几个核心操作就能轻松搞定!先给你看完整的实现代码,再一步步拆解逻辑:
步骤1:定义原始DataFrame
首先我们先还原你给出的原始数据:
import pandas as pd # 原始输入数据 df = pd.DataFrame({ 'ID': ['A', 'B', 'C'], 'value': [134, 345, 131], 'is_valid': [True, False, True] })
步骤2:核心转换代码
这部分是实现需求的关键:
# 将ID设为行索引,再把行索引转成列的层级 transformed = df.set_index('ID').unstack() # 合并多级列名,生成「ID_原列名」的格式 transformed.columns = [f'{id_col}_{orig_col}' for orig_col, id_col in transformed.columns] # 重置索引得到单行结构 final_result = transformed.reset_index(drop=True)
代码逻辑解释
set_index('ID'):把ID列转为行索引,让每个ID对应一行的value和is_valid字段unstack():将行索引(也就是各个ID)转成列的第二层级,此时DataFrame的列是多级结构(第一层是原列名,第二层是ID)- 列名重命名:遍历多级列名,把「ID」和「原列名」拼接成你需要的前缀格式(比如
A_ID、B_value) reset_index(drop=True):去掉默认的索引列,得到纯粹的1行9列结构
最终结果验证
输出final_result就会得到你期望的结构:
| A_ID | A_value | A_is_valid | B_ID | B_value | B_is_valid | C_ID | C_value | C_is_valid |
|---|---|---|---|---|---|---|---|---|
| A | 134 | True | B | 345 | False | C | 131 | True |
内容的提问来源于stack exchange,提问作者french_fries
相关产品推荐
相关产品推荐

