按功能分组的字符串模式聚合

时间:2018-11-22 02:26:39

标签: 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

因为伦敦和华盛顿出现2次,而曼彻斯特和芝加哥仅出现1次。

我尝试了

from scipy.stats import mode
df_summary = df.groupby('Country')['City'].\
                        apply(lambda x: mode(x)[0][0]).reset_index()

但是似乎不能在字符串上使用

2 个答案:

答案 0 :(得分:1)

我无法复制您的错误,但是您可以使用pd.Series.mode(接受字符串并返回一个序列),并使用iat提取第一个值:

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

print(res)

  Country        City
0      UK      London
1     USA  Washington

答案 1 :(得分:1)

尝试如下:

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

OR

import pandas as pd
from scipy import stats

可以将scipystats + 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值,它也可以提供很好的计数:

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