Python 如何在条件中用另一个列值替换一个列值
我有一个像这样的数据框Python 如何在条件中用另一个列值替换一个列值,python,pandas,Python,Pandas,我有一个像这样的数据框 df.head(10) 7 RT (min) Area (Ab*s) Quality patch similarity 8 10.167 23278313 64 NaN NaN 9 10.167 23278313 47 NaN NaN 10 10.167 23278313 38 NaN NaN 28 10.333 3407159
df.head(10)
7 RT (min) Area (Ab*s) Quality patch similarity
8 10.167 23278313 64 NaN NaN
9 10.167 23278313 47 NaN NaN
10 10.167 23278313 38 NaN NaN
28 10.333 3407159 49 10.167 0.983935
29 10.333 3407159 22 10.167 0.983935
30 10.333 3407159 16 10.167 0.983935
48 10.390 3299202 38 10.333 0.994514
49 10.390 3299202 35 10.333 0.994514
50 10.390 3299202 32 10.333 0.994514
68 10.516 2015786 50 10.390 0.988018
我想要当df['similarity']>0.99时,然后df['RT(min)]=df['patch']
。
例如,df应如下所示:
7 RT (min) Area (Ab*s) Quality patch similarity
8 10.167 23278313 64 NaN NaN
9 10.167 23278313 47 NaN NaN
10 10.167 23278313 38 NaN NaN
28 10.333 3407159 49 10.167 0.983935
29 10.333 3407159 22 10.167 0.983935
30 10.333 3407159 16 10.167 0.983935
48 10.333 3299202 38 10.333 0.994514
49 10.333 3299202 35 10.333 0.994514
50 10.333 3299202 32 10.333 0.994514
68 10.516 2015786 50 10.390 0.988018
mask = df['similarity'] > 0.99
df.loc[mask, 'RT'] = df['patch']
RT(min)中的48,49,50行替换为补片中的48,49,50行
我试过了
p = df[df['similarity']>0.99].index.tolist()
df['RT (min)'][p] =df['patch'][p]
而我得到了错误
InvalidIndexError: Reindexing only valid with uniquely valued Index objects
我不知道怎么算出来。类似这样的:
7 RT (min) Area (Ab*s) Quality patch similarity
8 10.167 23278313 64 NaN NaN
9 10.167 23278313 47 NaN NaN
10 10.167 23278313 38 NaN NaN
28 10.333 3407159 49 10.167 0.983935
29 10.333 3407159 22 10.167 0.983935
30 10.333 3407159 16 10.167 0.983935
48 10.333 3299202 38 10.333 0.994514
49 10.333 3299202 35 10.333 0.994514
50 10.333 3299202 32 10.333 0.994514
68 10.516 2015786 50 10.390 0.988018
mask = df['similarity'] > 0.99
df.loc[mask, 'RT'] = df['patch']
例如:
df = pd.DataFrame({"RT":[10.1,10.2,10.4],"patch":[float("NaN"),10.3,10.3],"similarity":[float("NaN"),0.9,0.998]})
制作:
RT patch similarity
0 10.1 NaN NaN
1 10.2 10.3 0.900
2 10.4 10.3 0.998
创建一个遮罩,并用于从patch
mask = df['similarity'] > 0.99
df.loc[mask, 'RT'] = df['patch']
结果:
RT patch similarity
0 10.1 NaN NaN
1 10.2 10.3 0.900
2 10.3 10.3 0.998
您可以按如下方式分配:
df['RT'] = df['RT'].mask(df['similarity'] > 0.99, df['patch'])
你完全解决了我的问题,谢谢你的详细介绍answer@X.tang很好-请将答案标记为已接受?