gpt4 book ai didi

python - 如何对列进行分组并输出用制表符分隔的多列 - Python

转载 作者:行者123 更新时间:2023-12-01 01:11:25 25 4
gpt4 key购买 nike

我的目标是按“患者”列进行分组,并在单行 = 中输出每个患者,然后按顺序输出输入文件中的多列。理想情况下,我希望在列头有一个计数器。这是我的输入文件示例:

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 即 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,但无法排除故障。

最佳答案

下面是一种可能的解决方案。也许不是 super 优雅,但很有效。

grouped = df.groupby('Patient')

col = ['Patient']
data = []
for p, g in grouped:
d = {'Patient': p}
g.reset_index(inplace=True)
for i, row in g.iterrows():
for c in range(2, len(g.columns)):
col_name = g.columns[c] + '_' + str(i + 1)
d[col_name] = row[g.columns[c]]
if col_name not in col:
col.append(col_name)
data.append(d)

df = pd.DataFrame(data, columns=col)

关于python - 如何对列进行分组并输出用制表符分隔的多列 - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54834217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com