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

Pandas实现按A列分组后动态将B列值转为列并计数

动态列转换计数实现方案

你需要实现的逻辑是按A列分组,统计B列各取值的出现次数,同时自动将B列的所有唯一值转换为新列,不需要手动硬编码列名,以下两种方法都可以实现需求:


原始测试数据

先复现你给出的源DataFrame:

import pandas as pd

df1 = pd.DataFrame(
{'A': {0: '1',  1: '7',  2: '7',  3: '1',  4: '7',  5: '1'},
 'B': {0: 'S', 1: 'S', 2: 'D', 3: 'D', 4: 'D', 5: 'S'}})

方法1:使用crosstab(最适配场景)

pd.crosstab()是pandas专门用于交叉统计的函数,会自动提取列维度的唯一值生成列,统计对应行列组合的计数,代码最简洁:

# 交叉统计,自动生成B取值对应的列
df2 = pd.crosstab(index=df1['A'], columns=df1['B']).reset_index()
# 调整列顺序和你给出的目标结构完全一致
df2 = df2[['A', 'S', 'D']]

运行后输出的df2和你给出的目标结果完全匹配:

ASD
0121
1712

方法2:基于已掌握的groupby实现

如果想沿用groupby的逻辑,分组计数后用unstack()将B列的取值从索引层级转为独立列即可,同样支持动态生成列,后续B列新增取值不需要修改代码:

# 按A、B分组计数后,将B的索引层级展开为列
df2 = df1.groupby(['A', 'B']).size().unstack(fill_value=0).reset_index()
# 按需调整列顺序
df2 = df2[['A', 'S', 'D']]

两种方法都不需要提前指定B列有多少种取值,会自动识别所有唯一值生成对应列,满足动态转换的需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:45:31