根据另一个df中的特定索引替换一个df中的值

时间:2019-12-05 11:54:52

标签: pandas

我有一个如下数据框:

df1:
ix a  b   c  d  e 
s1 AA AG AG GG AA
s2 DI DD GG GG GG
S3 TT CC TC TT TC
S4 AA AA AA AA AA
S5 CC CC DD CC CC

和另一个像这样的数据框:

df2
ix col1 col2 
s1 2     A
s3 4     G
S4 7     A

我想将df1的索引中的所有值替换为df1中的“ XX”,其中索引(s1,s4)在df2的col2中为“ A”。

所以最终的数据帧是这样的:

df1:
ix a  b   c  d  e 
s1 XX XX XX XX XX
s2 DI DD GG GG GG
S3 TT CC TC TT TC
S4 XX XX XX XX XX
S5 CC CC DD CC CC

任何建议都值得赞赏。预先谢谢你。

df = pd.DataFrame({'ix': {0: 's1', 1: 's2', 2: 'S3', 3: 'S4', 4: 'S5'}, 
                   'a': {0: 'AA', 1: 'AG', 2: 'AG', 3: 'GG', 4: 'AA'}, 
                   'b': {0: 'DI', 1: 'DD', 2: 'GG', 3: 'GG', 4: 'GG'}, 
                   'c': {0: 'TT', 1: 'CC', 2: 'TC', 3: 'TT', 4: 'TC'}, 
                   'd': {0: 'AA', 1: 'AA', 2: 'AA', 3: 'AA', 4: 'AA'}, 
                   'e': {0: 'CC', 1: 'DD', 2: 'CC', 3: 'CC', 4: 'CC'}})

1 个答案:

答案 0 :(得分:2)

如果df2col2,则获取A的索引值,并在XX中设置与df1匹配的行:

df1.loc[df1.index.isin(df2.index[df2['col2'].eq('A')])] = 'XX'
print (df1)
     a   b   c   d   e
ix                    
s1  XX  XX  XX  XX  XX
s2  AG  DD  CC  AA  DD
S3  AG  GG  TC  AA  CC
S4  XX  XX  XX  XX  XX
S5  AA  GG  TC  AA  CC

设置

df1 = pd.DataFrame({'ix': {0: 's1', 1: 's2', 2: 'S3', 3: 'S4', 4: 'S5'}, 
                   'a': {0: 'AA', 1: 'AG', 2: 'AG', 3: 'GG', 4: 'AA'}, 
                   'b': {0: 'DI', 1: 'DD', 2: 'GG', 3: 'GG', 4: 'GG'}, 
                   'c': {0: 'TT', 1: 'CC', 2: 'TC', 3: 'TT', 4: 'TC'}, 
                   'd': {0: 'AA', 1: 'AA', 2: 'AA', 3: 'AA', 4: 'AA'}, 
                   'e': {0: 'CC', 1: 'DD', 2: 'CC', 3: 'CC', 4: 'CC'}}).set_index('ix')

print (df1)
     a   b   c   d   e
ix                    
s1  AA  DI  TT  AA  CC
s2  AG  DD  CC  AA  DD
S3  AG  GG  TC  AA  CC
S4  GG  GG  TT  AA  CC
S5  AA  GG  TC  AA  CC

print (df2)
    col1 col2
ix           
s1     2    A
s3     4    G
S4     7    A