簡體   English   中英

根據 pandas 中的另一個填充 dataframe 中的單元格

[英]Fill cell within a dataframe according to another in pandas

我有兩個數據框,例如

表 1:

ORFs_values      Groups       SP1  SP2   SP3
SP_ORF1          Group1       1    1     0
SP_ORF1          Group2       0    0     0
SP_ORF1          Group3       0    1     0
SP_ORF1          Group4       1    1     1

另一個:

選項卡2

Groups         SP_names   SP_names2
Group1         SP1        SP1_A
Group1         SP2        SP2_A
Group3         SP2        SP2_BL
Group4         SP1        SP1_BI
Group4         SP2        SP2_OP
Group4         SP3        SP3_I

我想在Tab1中用 1 替換所有單元格,並用它們對應的SP_names2每個匹配的GroupsSP_names

例如,在Tab1的第一行中, Group1SP1SP_names2值為SP1_A ,所以我將 1 替換為SP1_A等等......

然后我應該得到以下 output:

新標簽1:

ORFs_values      Groups       SP1      SP2       SP3
SP_ORF1          Group1       SP1_A    SP2_A     0
SP_ORF1          Group2       0         0        0
SP_ORF1          Group3       0         SP2_BL   0
SP_ORF1          Group4       SP1_BI    SP2_OP   SP3_I

如果有幫助,這里有兩個 df 格式的 df:

選項卡1

{'ORFs_values': {0: 'SP_ORF1', 1: 'SP_ORF1', 2: 'SP_ORF1', 3: 'SP_ORF1'}, 'Groups': {0: 'Group1', 1: 'Group2', 2: 'Group3', 3: 'Group4'}, 'SP1': {0: 1, 1: 0, 2: 0, 3: 1}, 'SP2': {0: 1, 1: 0, 2: 1, 3: 1}, 'SP3': {0: 0, 1: 0, 2: 0, 3: 1}}

選項卡2

{'Groups': {0: 'Group1', 1: 'Group1', 2: 'Group3', 3: 'Group4', 4: 'Group4', 5: 'Group4'}, 'SP_names': {0: 'SP1', 1: 'SP2', 2: 'SP2', 3: 'SP1', 4: 'SP2', 5: 'SP3'}, 'SP_names2': {0: 'SP1_A', 1: 'SP2_A', 2: 'SP2_BL', 3: 'SP1_BI', 4: 'SP2_OP', 5: 'SP3_I'}}

這是使用mask()的解決方案

df是 Tab1, df2是 Tab2

df = df.set_index('Groups')
(df.mask(df.eq(1),
         df2.set_index(['Groups','SP_names'])['SP_names2'].unstack())
 .reset_index())

Output:

   Groups ORFs_values     SP1     SP2    SP3
0  Group1     SP_ORF1   SP1_A   SP2_A      0
1  Group2     SP_ORF1       0       0      0
2  Group3     SP_ORF1       0  SP2_BL      0
3  Group4     SP_ORF1  SP1_BI  SP2_OP  SP3_I

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM