Моя цель - сгруппировать по столбцу «Пациент» и вывести каждого пациента в одну строку =, за которой следуют несколько столбцов из моего входного файла в последовательности.В идеале я бы предпочел иметь счетчик в заголовках столбцов.Вот мой пример входного файла:
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
В идеале было бы неплохо # Тесты / ген / изменение, т. Е. Test_1 gene_1 alstruction_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, но не смог устранить неполадки.