我有以下数据框: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
慕丝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'
添加回答
举报
0/150
提交
取消