Получение суммы определенных строк 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 & 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 & 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 & Handling = 60,000       
Violence Against the Person = 20,500

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

...

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

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

Pierre D 10.12.2020 18:03
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот настройка для генерации данных в вашем примере в виде DataFrame (хотя есть только один столбец). Затем простые 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 & 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 & Handling               15921
Violence Against the Person    10280
Criminal Damage                 6085
Burglary                        5636

Другие вопросы по теме