如何对Pandas DataFrame按ID分组转置生成动态增量表头且不聚合
Pandas 按ID分组转置Value列实现方法
核心逻辑
按ID分组后给组内每条数据生成递增序号,以此为新列名后缀做宽表转换,全程无聚合运算,完全保留原始Value值。
完整实现代码
import pandas as pd # 构造原始DataFrame data = {'ID': ['A', 'B', 'B', 'B', 'C', 'C', 'D', 'D', 'D', 'D'], 'Value': [30, 760, 740, 755, 1 ,4, 56, 34, 76, 12]} df = pd.DataFrame(data, columns=['ID', 'Value']) # 1. 为每个ID分组内的记录生成从1开始的递增序号 df['col_suffix'] = df.groupby('ID').cumcount() + 1 # 2. 透视转换为宽表 res = df.pivot(index='ID', columns='col_suffix', values='Value').reset_index() # 3. 重命名列名符合要求 res.columns = ['ID'] + [f'Value{idx}' for idx in res.columns[1:]] # 可选:空值替换为空字符串,和示例输出格式完全一致 res = res.fillna('')
输出结果
打印res即可得到预期格式:
ID Value1 Value2 Value3 Value4 0 A 30 1 B 760 740 755 2 C 1 4 3 D 56 34 76 12
如果你后续需要对Value列做数值计算,去掉最后一步fillna('')即可,缺失位置会保留NaN格式,不影响数值运算。
内容的提问来源于stack exchange,提问作者Khaled Hosny
相关产品推荐
相关产品推荐

