代码之家  ›  专栏  ›  技术社区  ›  Ahamed Moosa

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

  •  2
  • Ahamed Moosa  · 技术社区  · 7 年前

    我有如下所示的数据帧

    Country  City
    UK       London
    USA      Washington
    UK       London
    UK       Manchester
    USA      Washington
    USA      Chicago
    

    我想要的输出应该是

    Country City
    UK      London
    USA     Washington
    

    因为伦敦和华盛顿出现了两次,而曼彻斯特和芝加哥只出现了一次。

    我试过了

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

    2 回复  |  直到 7 年前
        1
  •  1
  •   jpp    7 年前

    我无法复制您的错误,但您可以使用 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
    
        2
  •  1
  •   Karn Kumar    7 年前

    尝试以下方法:

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

    或

    import pandas as pd
    from scipy import stats
    

    可以使用 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值,它也会给出很好的计数:

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