为了账号安全,请及时绑定邮箱和手机立即绑定

在Python中的熊猫数据帧上从groupby中选择索引值

在Python中的熊猫数据帧上从groupby中选择索引值

阿波罗的战车 2021-03-30 15:10:31
我有以下数据框: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 region0     A          10      I1     B          20     II2     C          30    III3     D          15      I4     E          25     II5     F          35    III我想从人口最多的地区中选择人口最少的地方。df.groupby('region').population.sum()返回值:regionI      25II     45III    65Name: population, dtype: int64但是我不知道如何从这里继续(使用.groupby / .loc / .iloc)有什么建议吗?
查看完整描述

2 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

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


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


查看完整回答
反对 回复 2021-04-09
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

您需要找到region最高的population。然后groupby place转到具有该区域的数据子集,并找到最低的位置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'


查看完整回答
反对 回复 2021-04-09
  • 2 回答
  • 0 关注
  • 195 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信