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

如何在Pandas中基于另一列值拆分列并重塑DataFrame?

Pandas基于另一列拆分列的实现方法

当然可以实现这个需求!本质上咱们是要把长格式的DataFrame转成宽格式,用Pandas的分组+重塑工具就能轻松搞定。下面给你一步步演示具体操作:

1. 先准备好原始数据

首先导入Pandas并定义你给出的原始DataFrame:

import pandas as pd

df = pd.DataFrame({
    'col1':['a','a','b','b','c','c'], 
    'col2':['str_a1','str_a2','str_b1','str_b2','str_c1','str_c2']
})

2. 给每个分组添加行序号

因为每个col1的取值(比如'a')对应两行col2的数据,咱们需要给每组内的行标记是第1个还是第2个。这里用groupby结合cumcount()来实现——cumcount()会在每个分组内从0开始计数,加1后就得到1、2的序号:

df['row_num'] = df.groupby('col1').cumcount() + 1

这时候DataFrame会变成这样:

col1col2row_num
astr_a11
astr_a22
bstr_b11
bstr_b22
cstr_c11
cstr_c22

3. 用pivot重塑数据

接下来用pivot()方法把长格式转成宽格式:

  • index='col1':把col1作为结果的行索引
  • columns='row_num':把刚才生成的序号作为列的区分标识
  • values='col2':把col2的值填充到对应的位置
df_pivoted = df.pivot(index='col1', columns='row_num', values='col2').reset_index()

4. 重命名列名匹配目标格式

现在的列名是col1、1、2,咱们把它们改成需要的col1_1、col2_1、col2_2:

df_pivoted.columns = ['col1_1', 'col2_1', 'col2_2']

最终结果

运行完上面的步骤,你就得到了目标的df2:

print(df_pivoted)
# 输出:
  col1_1  col2_1  col2_2
0      a  str_a1  str_a2
1      b  str_b1  str_b2
2      c  str_c1  str_c2

简化版一行代码

如果你喜欢更简洁的写法,可以把所有步骤链式调用:

df2 = (df.assign(row_num=df.groupby('col1').cumcount()+1)
         .pivot(index='col1', columns='row_num', values='col2')
         .reset_index()
         .rename(columns={'col1':'col1_1', 1:'col2_1', 2:'col2_2'}))

额外说明

这个方法不仅适用于每组2行的情况,如果你的数据里col1的每个分组有更多行(比如3行),它会自动生成col2_3这样的列,兼容性很强哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:33:11