Есть годы с 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 каждого случая каждой «основной категории»
Вот настройка для генерации данных в вашем примере в виде 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
То есть вы игнорируете
Year
иBorough
? Тогда простоdf.groubpy('Major Category')['numCrimes'].sum()
должно соответствовать всем требованиям. Если вы хотите, чтобы результат был какSeries
, добавьте.squeeze()
в конце.