如何在条件中将一列值替换为另一列值[重复]

Posted

技术标签:

【中文标题】如何在条件中将一列值替换为另一列值[重复]【英文标题】:How to replace one col values with another col values in conditions [duplicate] 【发布时间】:2019-04-20 12:16:31 【问题描述】:

我有一个这样的熊猫数据框

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

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

我不知道怎么解决。

【问题讨论】:

【参考方案1】:

类似这样的:

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

【讨论】:

你完美解决了我的问题,谢谢你的详细解答 @X.tang 很好 - 请将答案标记为已接受。【参考方案2】:

pd.Series.mask

您可以按如下方式分配:

df['RT'] = df['RT'].mask(df['similarity'] > 0.99, df['patch'])

【讨论】:

***.com/q/21608228 ?

以上是关于如何在条件中将一列值替换为另一列值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 mySQL 返回另一列中每个值的最常见列值?

如何获得DataGridView中某一列中全部的值?

如何将一列的列值组合到 MySQL 中的另一列中?

mysql如何根据一列值更新另一列的值?

使用 dplyr [重复] 有条件地将一列中的值替换为另一列中的值

如何在mysql中将一列值作为静态插入?