我正在嘗試與此鏈接類似的問題。我能夠在第一部分獲得幫助,但在創建最終資料框的第二部分中遇到了困難。
假設一個類似的資料框有一些變化:
import pandas
import itertools
mygenes=['ABC1', 'ABC2', 'ABC3', 'ABC4']
df = pandas.DataFrame({'Gene' : ['ABC1', 'ABC2', 'ABC3', 'ABC4','ABC5'],
'base1':[1,2,3,4,5] })
Gene base1
0 ABC1 1
1 ABC2 2
2 ABC3 3
3 ABC4 4
4 ABC5 5
我想獲得以下最終資料框:
base1 base2
'ABC1', 'ABC2' 1 2
'ABC1', 'ABC3' 1 3
'ABC1', 'ABC4' 1 4
'ABC1', 'ABC5' 1 5
'ABC2', 'ABC3' 2 3
'ABC2', 'ABC4' 2 4
'ABC2', 'ABC5' 2 5
'ABC3', 'ABC4' 3 4
'ABC3', 'ABC5' 3 5
'ABC4', 'ABC5' 4 5
我已經成功地使用包itertools進行組合如下:
mygenes=['ABC1', 'ABC2', 'ABC3', 'ABC4', 'ABC5']
list(combinations(mygenes,2))
目標是保留每個“基因”的唯一值,并在我創建組合時base1創建一個新列。base2
uj5u.com熱心網友回復:
你可以試試cross merge
out = df.merge(df,how='cross',suffixes = ('_1', '_2')).query('base1_1<base1_2')
Out[50]:
Gene_1 base1_1 Gene_2 base1_2
1 ABC1 1 ABC2 2
2 ABC1 1 ABC3 3
3 ABC1 1 ABC4 4
4 ABC1 1 ABC5 5
7 ABC2 2 ABC3 3
8 ABC2 2 ABC4 4
9 ABC2 2 ABC5 5
13 ABC3 3 ABC4 4
14 ABC3 3 ABC5 5
19 ABC4 4 ABC5 5
后set_index
out = out.set_index(['Gene_1','Gene_2'])
Out[52]:
base1_1 base1_2
Gene_1 Gene_2
ABC1 ABC2 1 2
ABC3 1 3
ABC4 1 4
ABC5 1 5
ABC2 ABC3 2 3
ABC4 2 4
ABC5 2 5
ABC3 ABC4 3 4
ABC5 3 5
ABC4 ABC5 4 5
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/456644.html
標籤:熊猫
下一篇:將df列轉換為jsondf列
