如果数据帧中的值与另一个中的值匹配,则更改该数据帧中的值

2024-10-02 10:26:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在有一个数据帧,看起来像这样:

           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附加在他身上,RedBlue

我要做的是,如果一个所有者在列的任何地方都有colorRed作为Vehicle_Color值,那么将所有其他值替换为Red。你知道吗

有什么想法吗?你知道吗

谢谢


Tags: 数据地方greenblueredsallypetercolor
2条回答

让我们使用transform+any除去lambda:

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的索引中指定的,所以这应该会稍微快一点。你知道吗

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

你可以的

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

相关问题 更多 >

    热门问题