#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()
должно соответствовать всем требованиям. Если вы хотите получить результат в виде aSeries
, добавьте.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