【问题标题】:dataframe groupby one column and average one column while finding most occuring in another数据框按一列分组并平均一列,同时发现大多数发生在另一列
【发布时间】:2019-03-29 13:11:07
【问题描述】:

我有一个 pandas 数据框,我想按一列分组,同时平均一列并在另一列中找到最常出现的值

我能够做到,但我认为有一种简洁的方法可以做到这一点,而不是 4 行代码

import pandas as pd
df = pd.DataFrame({'Country' : ['USA', 'USA', 'Russia','USA', 'Russia', 'Russia'], 'City' : ['New-York', 'New-York', 'Sankt-Petersburg', 'Chicago', 'Moscow', 'Moscow'], 'Flights' : [22, 45, 32, 16, 31, 25]})
w=df.groupby('Country').mean().round(decimals=2)
x=(df.groupby('Country')['City'].agg(pd.Series.mode))
y=x.to_frame()
z = pd.concat([w, y], axis=1 ,join='outer')
Country   Flights   City

Russia    29.33         Moscow

USA       27.67         New-York

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    GroupBy.agg 与 lambda 函数一起使用,对于模式也可以添加 Series.iat 以选择第一个值,因为 mode 应该返回更多值:

    z = df.groupby('Country').agg({'Flights': lambda x: round(x.mean(), 2), 
                                   'City': lambda x: x.mode().iat[0]})
    print (z)
             Flights      City
    Country                   
    Russia     29.33    Moscow
    USA        27.67  New-York
    

    z = df.groupby('Country', as_index=False).agg({'Flights': lambda x: round(x.mean(),2), 
                                                   'City': lambda x: x.mode().iat[0]})
    print (z)
    
      Country  Flights      City
    0  Russia    29.33    Moscow
    1     USA    27.67  New-York
    

    【讨论】:

      猜你喜欢
      • 2016-06-05
      • 1970-01-01
      • 1970-01-01
      • 2021-08-07
      • 2014-06-17
      • 1970-01-01
      • 1970-01-01
      • 2016-06-04
      • 1970-01-01
      相关资源
      最近更新 更多