Изменить значения в кадре данных, если он соответствует значению в другой строке - PullRequest
0 голосов
/ 27 мая 2018

У меня в настоящее время есть кадр данных, который выглядит следующим образом:

           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

ЧтоЯ пытаюсь сделать, если у владельца есть цвет Red для Vehicle_Color значения в любом месте столбца, замените все другие значения на Red.

Есть мысли?

Спасибо

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

Давайте избавимся от лямбды, используя transform + 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'

Это должно быть немного быстрее, так как группировщик указан на *Индекс 1009 *.

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
0 голосов
/ 27 мая 2018

Вы могли бы

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...