Python 按函数分组的字符串模式聚合

Python 按函数分组的字符串模式聚合,python,pandas,aggregate,pandas-groupby,mode,Python,Pandas,Aggregate,Pandas Groupby,Mode,我有如下所示的数据帧 Country City UK London USA Washington UK London UK Manchester USA Washington USA Chicago 我想对国家进行分组,并根据一个国家中重复次数最多的城市进行汇总 我想要的输出应该是 Country City UK London USA Washington 因为伦敦和华盛顿出现了两次,而曼彻斯特和芝加哥只出

我有如下所示的数据帧

Country  City
UK       London
USA      Washington
UK       London
UK       Manchester
USA      Washington
USA      Chicago
我想对国家进行分组,并根据一个国家中重复次数最多的城市进行汇总

我想要的输出应该是

Country City
UK      London
USA     Washington
因为伦敦和华盛顿出现了两次,而曼彻斯特和芝加哥只出现了一次

我试过了


但它似乎对字符串不起作用

我无法复制您的错误,但您可以使用,它接受字符串并返回一个序列,使用来提取第一个值:

res = df.groupby('Country')['City'].apply(lambda x: x.mode().iat[0]).reset_index()

print(res)

  Country        City
0      UK      London
1     USA  Washington
>>> df.groupby('Country').agg({'City': lambda x:stats.mode(x)})
                        City
Country
UK           ([London], [2])
USA      ([Washington], [2])
尝试以下方法:

>>> df.City.mode()
0        London
1    Washington
dtype: object

可以将
scipy
stats
+
lambda
一起使用:

df.groupby('Country').agg({'City': lambda x:stats.mode(x)[0]})
               City
Country
UK           London
USA      Washington

#  df.groupby('Country').agg({'City': lambda x:stats.mode(x)[0]}).reset_index()
但是,如果您不想返回ony First值,它也会给出很好的计数:

res = df.groupby('Country')['City'].apply(lambda x: x.mode().iat[0]).reset_index()

print(res)

  Country        City
0      UK      London
1     USA  Washington
>>> df.groupby('Country').agg({'City': lambda x:stats.mode(x)})
                        City
Country
UK           ([London], [2])
USA      ([Washington], [2])

这意味着我应该导入pd.Series.mode吗?@MosesSoleman,不,无论何时使用
x.mode()
,您都在使用
pd.Series.mode
,也就是说,您不需要导入任何额外的内容。谢谢,它适用于此示例集,但让我试一个更大的集合。当我试着用一个更大的集合,它有许多唯一的值,我得到这个错误指数0是超出了轴0的大小界限0@MosesSoleman,您也可以尝试使用同样有效的
scipy