Панды Groupby заменить в зависимости от состояния - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть структуры набора данных, как показано ниже:

index country  city     Data
0     AU       Sydney   23
1     AU       Sydney   45
2     AU       Unknown  2
3     CA       Toronto  56
4     CA       Toronto  2
5     CA       Ottawa   1
6     CA       Unknown  2

Я хочу заменить «Неизвестно» в столбце города на режим вхождений городов в каждой стране.Результат будет:

...
2     AU       Sydney  2
...
6     CA       Toronto  2

Я могу получить режимы города с помощью:

city_modes = df.groupby('country')['city'].apply(lambda x: x.mode().iloc[0])

И я могу заменить значения на:

df['column']=df.column.replace('Unknown', 'something')

Но я не могуВыясните, как объединить их, чтобы заменить только неизвестные для каждой страны в зависимости от способа возникновения городов.

Есть идеи?

1 Ответ

0 голосов
/ 24 сентября 2018

Используйте transform для Series с таким же размером, как у оригинала DataFrame и установите новые значения с помощью numpy.where:

city_modes = df.groupby('country')['city'].transform(lambda x: x.mode().iloc[0])
df['column'] = np.where(df['column'] == 'Unknown',city_modes, df['column'])

Или:

df.loc[df['column'] == 'Unknown', 'column'] = city_modes 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...