我有一个如下数据框:
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'}})
答案 0 :(得分:2)
如果df2
为col2
,则获取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