Мои данные имеют следующую структуру:
Name Value id
0 Alegro 0.850122 alegro
1 Alegro 0.447362 alegro
2 AlEgro 0.711295 alegro
3 ALEGRO 0.123761 alegro
4 alegRo 0.273111 alegro
5 ALEGRO 0.564893 alegro
6 ALEGRO 0.276369 alegro
7 ALEGRO 0.526434 alegro
8 ALEGRO 0.924014 alegro
9 ALEGrO 0.629207 alegro
10 Belagio 0.834231 belagio
11 BElagio 0.788357 belagio
12 Belagio 0.092156 belagio
13 BeLaGio 0.810275 belagio
Для репликации запустите следующий код:
data = {'Name': ['Alegro', 'Alegro', 'AlEgro', 'ALEGRO', 'alegRo', 'ALEGRO','ALEGRO',
'ALEGRO','ALEGRO','ALEGrO', 'Belagio','BElagio', 'Belagio', 'BeLaGio'],
'Value': np.random.random(14)}
df = pd.DataFrame(data)
df['id'] = df.Name.str.lower()
Вы можете видеть, что есть некоторые опечатки в наборе данных.
df.groupby('id').Name.value_counts()
id Name
alegro ALEGRO 5
Alegro 2
ALEGrO 1
AlEgro 1
alegRo 1
belagio Belagio 2
BElagio 1
BeLaGio 1
Таким образом, цель состоит в том, чтобы взять наиболее частое значение из каждой категории и установить его как Новое имя.Для первой группы это будет ALEGRO
, а для второй Belagio
.
Желаемый кадр данных должен быть:
Name Value id
0 ALEGRO 0.850122 alegro
1 ALEGRO 0.447362 alegro
2 ALEGRO 0.711295 alegro
3 ALEGRO 0.123761 alegro
4 ALEGRO 0.273111 alegro
5 ALEGRO 0.564893 alegro
6 ALEGRO 0.276369 alegro
7 ALEGRO 0.526434 alegro
8 ALEGRO 0.924014 alegro
9 ALEGRO 0.629207 alegro
10 Belagio 0.834231 belagio
11 Belagio 0.788357 belagio
12 Belagio 0.092156 belagio
13 Belagio 0.810275 belagio
Любая идея будет высоко оценена!