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
。