如何用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
相关产品推荐
相关产品推荐

