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

如何用Pandas将DataFrame重构为指定的交叉表/透视表结构?

解决方案

方法1:使用pivot(最直接,适合无重复值场景)

你的数据中每个(Sequence, ID)组合都是唯一的,没有重复项,用pivot是最简洁的方式,完全匹配你只做格式重塑的需求:

import pandas as pd

csvFile = 'sequenceFile.csv'
df = pd.read_table(csvFile, sep=',', lineterminator='\n', header=0)

# 重塑数据结构
pivoted_df = df.pivot(index='ID', columns='Sequence', values='Hits')

执行后得到的结果完全符合预期:

Seq1  Seq2  Seq3
ID                  
K1     1     2     0
K2     0     1     2

方法2:使用pivot_table(兼容有重复值的场景)

如果后续数据可能出现重复的(Sequence, ID)组合,需要对重复项做聚合(比如求和、取均值),可以用pivot_table。针对当前无重复的情况,指定聚合函数为first即可:

pivoted_df = df.pivot_table(index='ID', columns='Sequence', values='Hits', aggfunc='first')

方法3:使用crosstab(交叉统计类场景适用)

crosstab默认用于频次统计,但通过values和aggfunc参数,也能实现同样的格式重塑:

pivoted_df = pd.crosstab(index=df['ID'], columns=df['Sequence'], values=df['Hits'], aggfunc='first')

三者差异说明

  • pivot:专为无重复行列组合的格式重塑设计,语法最简洁,性能最优,是当前场景的首选。
  • pivot_table:是pivot的功能超集,支持对重复组合做聚合操作,灵活性更强。
  • crosstab:默认用于交叉频次统计,需要传入完整Series而非列名,适合统计类场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 09:39:58