我的目标是按“患者”列分组,并将每个患者输出为一行 =,然后依次从我的输入文件中输出多列。理想情况下,我更喜欢在列标题中有一个计数器。这是我的输入文件示例:
Patient Test panel gene alteration
1 A 54 APC E1345*
1 B 54 TP53 Y205H
1 C 54 APC V2278V
2 A 54 KRAS G12D
2 B 54 PTEN L25L
3 A 54 KRAS G13D
3 C 54 TP53 C141W
3 C 54 APC R876*
3 A 54 ERBB2 L663P
按“患者”列分组的预期输出,然后循环“测试”、“基因”和“改变”列以创建以下内容:
Patient Test gene alteration Test gene alteration Test gene alteration Test gene alteration Test gene alteration
1 A APC E1345* B TP53 Y205H C TP53 Y205H
2 A KRAS G12D B PTEN L25L
3 A KRAS G13D C TP53 C141W C APC R876* A ERBB2 L663P A ERBB2 L663P
理想情况下,#Tests/gene/alteration ie Test_1gene_1alteration_1 等会很好。但是,我意识到这让事情变得复杂。
这是我尝试过的,但我无法获得感兴趣的输出
df = pd.read_table(args.md, sep="\t")
df=pd.DataFrame(df) #I used an input file
values=grouped['gene'].apply('\t'.join).reset_index()
这个函数的输出 1) 没有让我组合超过 'gene' 列,所以如果我使用 ['gene', 'Test'] 它不会给出所需的输出 2) 加入 '\t' 会从字面上看输出为 '\t' 而不是制表符
然后我尝试了
grouped=df.groupby('Patient')
print grouped
values=grouped['gene'].apply('\t'.join).reset_index()
print values
id_df = grouped['Test'].apply(lambda x: pd.Series(x.values)).unstack()
id_df = id_df.rename(columns={i: 'Test{}'.format(i + 1) for i in range(id_df.shape[1])})
result = pd.concat([id_df, values], axis=1)
print(result)
第二次尝试的结构不符合我的需要,但它确实为我提供了一个计数器
我想知道是否有人可以提供一些见解来获得所需的输出。我通过查看 SO 使用了上述命令,但无法进行故障排除。
慕田峪7331174
慕姐4208626
相关分类