Группировка и суммирование в пандах - PullRequest
3 голосов
/ 04 апреля 2019

У меня есть датафрейм с двумя столбцами. Первый столбец содержит years, а второй столбец содержит value. Я хочу сгруппировать определенный год и изменить его на одно имя для этой группы и добавить все соответствующие значения.

Например, ниже приведен небольшой набор данных

years    value
1950      3
1951      1
1952      2
1961      4
1964      10
1970      34

Вывод должен выглядеть как

years    value
1950's     6
1960's     14
1970's     34

Я пытаюсь сделать это в Python, используя pandas, и много раз пробовал, конвертируя в dict или for loop, но каждый раз мне не удавалось достичь желаемого. Может кто-нибудь помочь, пожалуйста?

Ответы [ 2 ]

3 голосов
/ 04 апреля 2019

Используйте целочисленное деление, кратное 10, приведите к строке и добавьте s и используйте эту серию для агрегирования sum:

y = ((df['years'] // 10) * 10).astype(str) + 's'

df = df.groupby(y)['value'].sum().reset_index()
print (df)
   years  value
0  1950s      6
1  1960s     14
2  1970s     34

Detail :

print (y)
0    1950s
1    1950s
2    1950s
3    1960s
4    1960s
5    1970s
Name: years, dtype: object
1 голос
/ 04 апреля 2019

Используйте pd.cut для создания групп, а затем используйте groupby:

df['year'] = pd.cut(df['year'], bins=[1949,1959,1969,1979], labels=['1950s','1960s','1970s'])

print(df.groupby('year')['value'].sum().reset_index())

Выход:

   year  value                                                                                                                       
0  1950s      6                                                                                                                       
1  1960s     14                                                                                                                       
2  1970s     34  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...