如何使用pandas将DataFrame列值转行为指定格式的透视表
你之前的pivot调用参数错误,你将sample也传入了columns参数,导致结果不符合预期,正确的处理逻辑如下:
1. 构造测试数据验证逻辑
import pandas as pd # 构造和你示例一致的原始数据 raw_data = [ ['a', 'A', 'G', 1.0], ['a', 'C', 'T', 4.0], ['a', 'GGG', 'AAC', 1.0], ['b', 'A', 'G', 1.0], ['b', 'C', 'T', 4.0], ] df = pd.DataFrame(raw_data, columns=['sample', 'REF', 'ALT', '#'])
2. 核心透视转换
# 行索引设为sample,列索引设为REF+ALT的组合,值取#列,缺失值填充为0 pivot_result = df.pivot( index='sample', columns=['REF', 'ALT'], values='#' ).fillna(0).astype(int)
执行后得到的结果默认是双层列索引结构,第一层为REF值,第二层为ALT值,和你需要的结构完全匹配:
| sample | (A,G) | (C,T) | (GGG,AAC) |
|---|---|---|---|
| a | 1 | 4 | 1 |
| b | 1 | 4 | 0 |
3. 适配你要求的打印格式
如果你需要把REF、ALT作为前两行显示成你给出的示例格式,可以增加转置处理:
formatted_df = pivot_result.T.reset_index() print(formatted_df)
输出结果:
REF ALT a b 0 A G 1 1 1 C T 4 4 2 GGG AAC 1 0
补充说明
如果你示例目标输出最后多出的(C,A)列是需要强制保留的组合,你可以提前将该组合的空记录插入原始数据,再执行透视即可对应生成数值为0的列。
内容的提问来源于stack exchange,提问作者user17153595
相关产品推荐
相关产品推荐

