【问题标题】:select index value from groupby on a pandas dataframe in python在python中的pandas数据帧上从groupby中选择索引值
【发布时间】:2018-06-20 14:48:23
【问题描述】:

我有以下数据框:

df = pd.DataFrame({'place'     : ['A', 'B', 'C', 'D', 'E', 'F'],
               'population': [10 , 20, 30, 15, 25, 35],
               'region': ['I', 'II', 'III', 'I', 'II', 'III']})

它看起来像这样:

      place  population region
0     A          10      I
1     B          20     II
2     C          30    III
3     D          15      I
4     E          25     II
5     F          35    III

我想从人口最多的地区中选择人口最少的地方。

df.groupby('region').population.sum()

返回:

region
I      25
II     45
III    65
Name: population, dtype: int64

但我不知道如何从这里开始(使用 .groupby / .loc / .iloc)

有什么建议吗?

【问题讨论】:

    标签: python python-3.x pandas dataframe pandas-groupby


    【解决方案1】:

    首先为区域人口添加一列:

    df['region_pop'] = df.groupby('region')['population'].transform(sum)
    

    然后对数据框进行排序并提取第一行:

    res = df.sort_values(['region_pop', 'population'], ascending=[False, True])\
            .head(1)
    

    结果:

      place  population region  region_pop
    2     C          30    III          65
    

    【讨论】:

    • 我相信这会比我的解决方案更快。 +1 :)
    • 谢谢,太好了!有没有办法在一行代码中做到这一点(使用方法链接)?
    • @Rene,也许吧,但它会是一个难以理解的混乱,我很难理解。
    • df.assign(region_population = df.groupby('region')['population'].transform(sum)).sort_values(['region_population', 'population'], 升序=[False , True]).iloc[0].place
    • @Rene,是的,那将是单线。但不要让它让你相信它更有效。您只是将明确的系列定义移至pd.DataFrame.assign
    【解决方案2】:

    您需要找到具有最高populationregion。然后groupbyplace 到具有该区域的数据子集,并找到最低population 的地方。 (假设地点在真实数据中是重复的)

    high_reg = df.groupby('region')['population'].sum().reset_index(name='count').sort_values('count').iloc[-1]['region']
    df.loc[df['region']==high_reg].groupby('place')['population'].sum().reset_index(name='count').sort_values('count').iloc[0]['place']
    

    输出:

    'C'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-30
      • 2014-06-02
      • 1970-01-01
      • 2017-08-27
      • 2019-01-24
      • 2014-10-30
      • 2019-05-16
      相关资源
      最近更新 更多