首页 > 解决方案 > 如果数据框中的值与另一行中的值匹配,则更改数据框中的值

问题描述

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

           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_colors附在他身上,Red并且Blue

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

有什么想法吗?

谢谢

标签: pythonpandasdataframe

解决方案


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'

这应该会稍微快一些,因为 grouper 是在df's index 上指定的。

df
    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

推荐阅读