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

如何将Dataframe重塑为宽格式:按Status统计Mutation出现次数

问题描述

现有如下DataFrame:

import pandas as pd

df = pd.DataFrame({'Status':['CO','AD','AD','AD','OT','CO','OT','AD'],
                   'Mutation':['H157Y','R47H','R47H','R67H','R62H','D87N','D39E','D39E']})
print(df)

输出:

Status Mutation
0     CO    H157Y
1     AD     R47H
2     AD     R47H
3     AD     R67H
4     OT     R62H
5     CO     D87N
6     OT     D39E
7     AD     D39E

需要将其转换为以Mutation值为列名、统计每个Status下对应突变出现次数的格式,最终结果如下:

df2 = pd.DataFrame({'Status':['CO','AD','OT'],'H157Y':[1,0,0],'R47H':[0,2,0],'R67H':[0,1,0],
                    'R62H':[0,0,1],'D87N':[1,0,0],'D39E':[1,0,1]})
print(df2)

输出:

Status  H157Y  R47H  R67H  R62H  D87N  D39E
0     CO      1     0     0     0     1     1
1     AD      0     2     1     0     0     0
2     OT      0     0     0     1     0     1
解决方案

可以通过两种简洁的方式实现需求:

方法1:使用pd.crosstab

pd.crosstab是pandas专门用于生成交叉统计表的函数,直接指定行、列和统计逻辑即可:

import pandas as pd

df = pd.DataFrame({'Status':['CO','AD','AD','AD','OT','CO','OT','AD'],
                   'Mutation':['H157Y','R47H','R47H','R67H','R62H','D87N','D39E','D39E']})

# 生成交叉表,统计各Status下Mutation的出现次数
df2 = pd.crosstab(df['Status'], df['Mutation']).reset_index()
# 移除列索引的默认名称(避免出现'Mutation'作为列名前缀)
df2.columns.name = None

print(df2)

方法2:使用pd.pivot_table

透视表同样可以实现分组统计,指定聚合函数为size(统计数量),并填充空值为0:

import pandas as pd

df = pd.DataFrame({'Status':['CO','AD','AD','AD','OT','CO','OT','AD'],
                   'Mutation':['H157Y','R47H','R47H','R67H','R62H','D87N','D39E','D39E']})

# 构建透视表,按Status分组,Mutation为列,统计每组数量
df2 = df.pivot_table(
    index='Status',
    columns='Mutation',
    aggfunc='size',
    fill_value=0
).reset_index()
# 移除列索引名称
df2.columns.name = None

print(df2)

两种方法最终都会输出符合要求的DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 03:31:36