我有一個包含兩列的輸入 pd 資料框,一列是序列,第二列是 ID(它是 1-1000 之間的數字)。我想獲得具有相同 ID 的序列之間的所有可能組合。
輸入:
sequence ID
CASSSTGVLLYEQCF 1
CASSSTGVLLYEQYF 1
CAFNAGGTSHGKLTF 2
CAFNAGGTSYGKLTF 2
CAINAGGTSYGKLTF 2
CANSPSPVAGTDTQYF 3
CASSPSPVAGTDTQYF 3
期望的輸出
CASSSTGVLLYEQCF CASSSTGVLLYEQYF
CAFNAGGTSHGKLTF CAFNAGGTSYGKLTF
CAFNAGGTSYGKLTF CAINAGGTSYGKLTF
CAINAGGTSYGKLTF CAFNAGGTSHGKLTF
CANSPSPVAGTDTQYF CASSPSPVAGTDTQYF
我一直在閱讀 itertools 但這只會給我所有可能的組合而不使用 ID。有誰知道如何使用 python 來完成這項作業,或者對我有什么建議可以查看?
uj5u.com熱心網友回復:
itertools.combinations對每個組使用自定義 lambda 函式GroupBy.apply:
from itertools import combinations
df1 = df.groupby('ID')['sequence'].apply(lambda x: pd.DataFrame(combinations(x, 2),
columns=['a','b']))
print (df1)
a b
ID
1 0 CASSSTGVLLYEQCF CASSSTGVLLYEQYF
2 0 CAFNAGGTSHGKLTF CAFNAGGTSYGKLTF
1 CAFNAGGTSHGKLTF CAINAGGTSYGKLTF
2 CAFNAGGTSYGKLTF CAINAGGTSYGKLTF
3 0 CANSPSPVAGTDTQYF CASSPSPVAGTDTQYF
df1 = df1.droplevel(1).reset_index()
print (df1)
ID a b
0 1 CASSSTGVLLYEQCF CASSSTGVLLYEQYF
1 2 CAFNAGGTSHGKLTF CAFNAGGTSYGKLTF
2 2 CAFNAGGTSHGKLTF CAINAGGTSYGKLTF
3 2 CAFNAGGTSYGKLTF CAINAGGTSYGKLTF
4 3 CANSPSPVAGTDTQYF CASSPSPVAGTDTQYF
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/444007.html
上一篇:在PandasGroupby中,在某些條件下找到最遠的行
下一篇:將字典轉換為熊貓資料框
