Значения столбца бининга Pandas в соответствии с индексом [дубликаты]

В настоящее время у меня есть DataFrame, в котором хранится возраст населения и частота этих возрастов, например:

      freq
 27    103
 28     43
 29     13
...    ...
 78     20
 79     13

Возраст — это индекс DataFrame. Я хотел бы выполнить некоторую магию Pandas, чтобы получить объединенный DataFrame следующим образом:

           freq
 (20, 30]   308
 (30, 40]   111
 (40, 50]    85
 (50, 60]    58
 (60, 70]    63
 (70, 80]   101

Таким образом, индекс теперь состоит из интервалов возрастов, а не отдельных возрастов, и частоты суммируются соответственно. Как я могу это сделать?


person jerry maks    schedule 17.11.2015    source источник


Ответы (1)


Вы можете использовать groupby после использования cut для бинирования индекса DataFrame. Например:

>>> df = pd.DataFrame({'freq': [2, 3, 5, 7, 11, 13]}, 
                      index=[22, 29, 30, 31,25, 42])

>>> df
    freq
22     2
29     3
30     5
31     7
25    11
42    13

Затем:

>>> df.groupby(pd.cut(df.index, np.arange(20, 60, 10))).sum()
          freq
(20, 30]    21
(30, 40]     7
(40, 50]    13

np.arange(20, 60, 10) определяет используемые бины; вы можете настроить их в соответствии с максимальными/минимальными значениями в столбце «Частота».

person Alex Riley    schedule 17.11.2015