Как создать колонку с наиболее часто встречающимися значениями другой колонки?
Необходимо создать колонку Temp для размещения в ней значения из колонки 'Net', наиболее часто встречающегося для каждого значения из колонки 'Address':
d = {'name': ['rick, mike, morty', 'tot, piter, carl', 'brick, nick', 'rick, reaven, bart, homer', 'rick, morty'],
'Date': ['11/05/2011', '9/02/2010', '1/01/2014', '12/20/2020', '9/30/2009'],
'Address': ['BY', 'YU', 'RU', 'BY', 'BY'], 'Net': [1, 0, 1, 0, 1]}
df = pd.DataFrame(data = d)
Ответ должен выглядеть как:
| Address | Temp |
|---|---|
| BY | 1 |
| YU | 0 |
| RU | 1 |
| BY | 1 |
| BY | 1 |
Ответы (3 шт):
Автор решения: CrazyElf
→ Ссылка
Наверное, можно короче, но вот рабочее решение через lambda и value_counts:
temp = df.groupby('Address')['Net'] \
.agg(lambda x: x.value_counts().keys()[0]) \
.rename('Temp')
df = df.join(temp, on='Address')
Автор решения: inquirer
→ Ссылка
df['Temp'] = [df['Net'][df[df['Address'] == df['Address'][i]].index].max()\
for i in range (0, len(df['Address']))]
print(df)
У меня так получилось.
Автор решения: D.Vinogradov
→ Ссылка
Как вариант через transform и mode
df['temp'] = df.groupby('Address')['Net'].transform(lambda x: x.mode().iat[0])
>>> df
name Date Address Net temp
0 rick, mike, morty 11/05/2011 BY 1 1
1 tot, piter, carl 9/02/2010 YU 0 0
2 brick, nick 1/01/2014 RU 1 1
3 rick, reaven, bart, homer 12/20/2020 BY 0 1
4 rick, morty 9/30/2009 BY 1 1