You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过另一列聚合DataFrame单列数据并重构数据格式?

解决方法

不用嵌套循环,用Pandas的分组和透视功能就能轻松实现,步骤如下:

步骤1:准备数据并替换NA为0

先把x列的NA替换成0,保证后续计算统一:

import pandas as pd
import numpy as np

# 构造原始DataFrame(已有数据可跳过此步)
raw_data = {
    'record': [1,1,1,2,3,3,4,5,6,6],
    'x': [np.nan, 2, 1, np.nan, 9, 1, 2, np.nan,4, np.nan]
}
df = pd.DataFrame(raw_data)

# 将NA替换为0并转为整数类型
df['x'] = df['x'].fillna(0).astype(int)

步骤2:给每个分组添加组内序号

为了把同一record下的多个x值分到不同列,给每个record组内的行添加递增序号:

df['col_num'] = df.groupby('record').cumcount()

步骤3:透视转换为宽表

用pivot函数转成目标格式:行对应唯一record,列对应组内序号,值为x:

result_df = df.pivot(index='record', columns='col_num', values='x')

步骤4:填充缺失值并整理格式

把透视后缺失的位置补0,重置索引让record成为普通列,再转为整数类型:

result_df = result_df.fillna(0).astype(int).reset_index()

最终输出

运行后result_df的内容即为你需要的格式:

record  0  1  2
0       1  0  2  1
1       2  0  0  0
2       3  9  1  0
3       4  2  0  0
4       5  0  0  0
5       6  4  0  0

如果需要纯文本无表头格式,可执行:

print(result_df.to_string(index=False, header=False))

输出结果:

1  0  2  1
 2  0  0  0
 3  9  1  0
 4  2  0  0
 5  0  0  0
 6  4  0  0

内容的提问来源于stack exchange,提问作者LDiamond

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 18:03:15