получение суммы определенных строк pandas

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

Для всех случаев есть годы с 2008 по 2018 год.

Я пытаюсь получить сумму значений «numCrimes» для каждой из «Основных категорий» в ее строке, а затем вычислить максимум.

 df
                                                           numCrimes
Year    Borough               Major Category    
2008    Barking and Dagenham    Burglary                    1819.0
                                Criminal Damage             3037.0
                                Drugs                       1541.0
                                Fraud or Forgery            1240.0
                                Other Notifiable Offences   269.0
                                Robbery                     671.0
                                Sexual Offences             212.0
                                Theft amp; Handling            5678.0
                                Violence Against the Person 5185.0

         Barnet                 Burglary                    3817.0
                                Criminal Damage             3048.0
                                Drugs                       1366.0
                                Fraud or Forgery            1379.0
                                Other Notifiable Offences   319.0
                                Robbery                     824.0
                                Sexual Offences             239.0
                                Theft amp; Handling            10243.0
                                Violence Against the Person 5095.0


 

примером вывода может быть:

Общее количество всех лет для

 Burglary = 35,800                
Criminal Damage  = 42,000          
Drugs = 13,000                 
Fraud or Forgery = 32,000           
Other Notifiable Offences = 15,000 
Robbery = 40,000                    
Sexual Offences = 12,000            
Theft amp; Handling = 60,000       
Violence Against the Person = 20,500
 

Максимальный тип преступления (основная категория), которое происходит, — это кража и незаконное обращение с оружием.

Таким образом, в основном добавление numCrimes каждого вхождения каждой «основной категории»

Комментарии:

1. Итак, в основном вы игнорируете Year и Borough ? Тогда просто df.groubpy('Major Category')['numCrimes'].sum() должно соответствовать всем требованиям. Если вы хотите получить результат в виде a Series , добавьте .squeeze() в конце.

Ответ №1:

Вот настройка для генерации данных в вашем примере в виде фрейма данных (даже если имеется только один столбец). Затем простое groupby и sum .

 # setup
ix = pd.MultiIndex.from_product([
    [2018],
    ['Barking and Dagenham', 'Barnet'],
    ['Burglary', 'Criminal Damage', 'Drugs', 'Fraud or Forgery',
     'Other Notifiable Offences', 'Robbery', 'Sexual Offences',
     'Theft amp; Handling', 'Violence Against the Person'],
], names=['Year', 'Borough', 'Major Category'])

df = pd.DataFrame([
    1819, 3037, 1541, 1240, 269, 671, 212,
    5678, 5185, 3817, 3048, 1366, 1379,
    319, 824, 239, 10243, 5095], index=ix, columns=['numCrimes'],
)

# sum
total = df.groupby('Major Category').sum()

# top 4:
total.squeeze().sort_values(ascending=False).head(4)
 

Вывод:

 Major Category
Theft amp; Handling               15921
Violence Against the Person    10280
Criminal Damage                 6085
Burglary                        5636