如果数据框中的值与另一行中的值匹配,则更改数据框中的值

时间:2018-05-27 04:10:25

标签: python pandas dataframe

我目前有一个如下所示的数据框:

           Owner        Vehicle_Color
0          James              Red
1          Peter              Green
2          James              Blue
3          Sally              Blue
4          Steven             Red
5          James              Blue
6          James              Red
7          Peter              Blue

请注意,James附加了两个vehicle_colorsRedBlue

我想要做的是,如果所有者在列的任何位置都有Red值的Vehicle_Color颜色,请将所有其他值替换为Red

有什么想法吗?

谢谢

2 个答案:

答案 0 :(得分:2)

让我们使用access forbidden by rule, client: 100.97.0.0, server: my-host.com, request: "GET /v1/doesnotwork HTTP/1.1", host: "my-host.com" + transform摆脱lambda:

any

或者,

m = df.Vehicle_Color.eq('Red').groupby(df.Owner).transform('any')
df.loc[m, 'Vehicle_Color'] = 'Red'

这应该稍快一些,因为在m = ( df.set_index('Owner') .Vehicle_Color .eq('Red') .groupby(level=0) .transform('any') ) df.loc[m, 'Vehicle_Color'] = 'Red' 的索引上指定了石斑鱼。

df

答案 1 :(得分:1)

你可以

In [279]: df['Vehicle_Color'] = df.groupby('Owner')['Vehicle_Color'].transform(
                                         lambda x: 'Red' if 'Red' in list(x) else x)

In [280]: df
Out[280]:
    Owner Vehicle_Color
0   James           Red
1   Peter         Green
2   James           Red
3   Sally          Blue
4  Steven           Red
5   James           Red
6   James           Red
7   Peter          Blue