如何将含id、text、expand列的DataFrame转换为带编号列的宽格式数据?
解决方案
你可以通过分组添加序号 + 透视表转换实现这个需求,用Pandas的具体代码如下:
实现步骤
- 为每个
(id, expand)组合生成组内序号,用来区分同组内的多条记录(比如pre组的第1、2条) - 将
expand字段与序号拼接成新列名(如pre1、post2) - 透视转换为宽格式,最后重置索引让
id回到列中
完整代码示例
import pandas as pd # 构造原始DataFrame df = pd.DataFrame({ 'id': [1,1,2,1,2,2], 'text': ['text1','text2','text3','text4','text5','text6'], 'expand': ['pre','pre','pre','post','post','post'] }) # 1. 添加组内序号 df['seq'] = df.groupby(['id', 'expand']).cumcount() + 1 # 2. 拼接新列名 df['col_name'] = df['expand'] + df['seq'].astype(str) # 3. 透视转换为宽格式 wide_df = df.pivot(index='id', columns='col_name', values='text').reset_index() # 4. 整理列顺序(可选,匹配目标格式的列顺序) wide_df = wide_df[['id', 'pre1', 'pre2', 'post1', 'post2']] # 可选:将空值NaN替换为空字符串 wide_df = wide_df.fillna('') print(wide_df)
输出结果
id pre1 pre2 post1 post2 0 1 text1 text2 text4 1 2 text3 text5 text6
内容的提问来源于stack exchange,提问作者Swaroop Poudel
相关产品推荐
相关产品推荐

