gpt4 book ai didi

python - Pandas 合并行,对每列进行不同的操作

转载 作者:太空宇宙 更新时间:2023-11-03 21:10:18 25 4
gpt4 key购买 nike

我是一个轻量级的 pandas 用户,我遇到了一个棘手的场景。我想合并“case_id”周围数据集的行。合并时,我希望“Gene”列按字母顺序连接字符串,如果它们是唯一的,则在它们之间用“->”连接。还有一些列有 0,其他列有 1,我希望在合并时用 1 代替零。

df.groupby('case_id').agg(special_merge)

def special_merge(data):
//Handle 'Gene' Column ex. KRAS->SMAD4->TP53
//Handle 0 vs 1

enter image description here

最佳答案

import pandas as pd

df = pd.DataFrame({'case_id':['1', '1', '1','2','2','2'],
'Gene':['KRAS','SMAD4','TP53','TP000','SMAD000','TP000'],
'ch_a':[0,1,0,0,0,0], 'ch_b':[0,0,0,1,1,0], 'ch_c':[0,0,0,1,1,0]})

  case_id     Gene  ch_a  ch_b  ch_c
0 1 KRAS 0 0 0
1 1 SMAD4 1 0 0
2 1 TP53 0 0 0
3 2 TP000 0 1 1
4 2 SMAD000 0 1 1
5 2 TP000 0 0 0

1) 按case_id、基因排序

2) 应用 lambda 来连接组中唯一的排序字符串

3) 应用 max 来连接组上的二进制变量(由列掩码定义)

4)将两个结果合并在一起

binary_cols = df.columns[df.columns.str.contains('^ch_')]

df_case_gene = df.groupby('case_id')['Gene'].agg(lambda x: '->'.join(x.sort_values().unique())).reset_index()

df_case_binary_cols = df.groupby('case_id')[binary_cols].agg('max').reset_index()

df_final = df_case_gene.merge(df_case_binary_cols)

df_final:

  case_id               Gene  ch_a  ch_b  ch_c
0 1 KRAS->SMAD4->TP53 1 0 0
1 2 SMAD000->TP000 0 1 1

关于python - Pandas 合并行,对每列进行不同的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55112214/

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