gpt4 book ai didi

python - pandas 中的分组和转换

转载 作者:太空狗 更新时间:2023-10-30 01:04:20 25 4
gpt4 key购买 nike

我的数据具有以下结构:

       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()

可以看到im数据集有一些拼写错误。

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

任何想法将不胜感激!

最佳答案

使用GroupBy.transform用于返回与原始 DataFrame 大小相同的 Series,因此可以创建新列。

df['New'] = df.groupby('id').Name.transform(lambda x: x.value_counts().index[0])

另一种解决方案:

df['New'] = df.groupby('id').Name.transform(lambda x: x.mode().iat[0])

print (df)
Name Value id New
0 Alegro 0.850122 alegro ALEGRO
1 Alegro 0.447362 alegro ALEGRO
2 AlEgro 0.711295 alegro ALEGRO
3 ALEGRO 0.123761 alegro ALEGRO
4 alegRo 0.273111 alegro ALEGRO
5 ALEGRO 0.564893 alegro ALEGRO
6 ALEGRO 0.276369 alegro ALEGRO
7 ALEGRO 0.526434 alegro ALEGRO
8 ALEGRO 0.924014 alegro ALEGRO
9 ALEGrO 0.629207 alegro ALEGRO
10 Belagio 0.834231 belagio Belagio
11 BElagio 0.788357 belagio Belagio
12 Belagio 0.092156 belagio Belagio
13 BeLaGio 0.810275 belagio Belagio

关于python - pandas 中的分组和转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54443759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com