выберите значение индекса из groupby на фрейме данных pandas в python

1

У меня есть следующий фреймворк:

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)

Любое предложение?

Теги:
pandas
dataframe
python-3.x
pandas-groupby

2 ответа

4
Лучший ответ

Сначала добавьте столбец для популяции региона:

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
    Я считаю, что это будет быстрее, чем мое решение. +1 :)
  • 0
    Спасибо, приятно! Есть ли способ сделать это в одной строке кода (с цепочкой методов)?
Показать ещё 3 комментария
1

Вам нужно найти 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'

Ещё вопросы

Сообщество Overcoder
Наверх
Меню