[英]Pandas fill incremental values for NA's according to another column in the 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
每個匹配的Groups
和SP_names
。
例如,在Tab1的第一行中, Group1
中SP1
的SP_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.