#python #pandas #dataframe #graphics #pandas-groupby
Вопрос:
Я хочу сгруппировать данные фрейма данных по возрастным диапазонам, чтобы иметь возможность отобразить возрастную группу, в которой произошло наибольшее количество дорожно-транспортных происшествий, но я не могу получить группу по возрастным диапазонам.
Фрейм данных выглядит следующим образом:
mty['V1_Edad'] = 'SD', '57', '34', '27', '39', '35', '28', '32', '45', '44', '79',
'50', '33', '40', '23', '22', '37', '20', '53', '18', 0, '21',
'26', '36', '24', '48', '49', '66', '43', '54', '67', '19', '38',
'31', '69', '80', '41', '25', '56', '42', '51', '59', '52', '30',
'73', '68', '60', '46', '61', '71', '29', '47', '58', '70', '55',
'72', '65', '17', '77', '62', '63', '75', '16', '78', '64', '74',
'76', '85', '86', '15', '88', '82', '84', '13', '14', '81', '83',
'0', 'NP', 'NO', 'HUYO', 'SI', '11', 'ESTACIONADO ', '42|', 'MP',
'Otro', 'S/', 'N/R', 'N/L', 'HUYE DEL LUGAR', 'NO VISIBLE', '87',
'94', '90', '12', 'S/D', '1900-01-29 00:00:00',
'1900-01-20 00:00:00', '1900-01-26 00:00:00',
'1900-02-01 00:00:00', '1900-02-16 00:00:00',
'1900-01-31 00:00:00', '1900-02-23 00:00:00',
'1900-02-18 00:00:00', '1900-01-22 00:00:00',
'1900-01-23 00:00:00', '1900-02-06 00:00:00',
'1900-01-21 00:00:00', '1900-02-15 00:00:00',
'1900-02-28 00:00:00', '1900-02-22 00:00:00',
'1900-02-07 00:00:00', '1900-02-04 00:00:00',
'1900-02-10 00:00:00', '1900-02-14 00:00:00',
'1900-01-25 00:00:00', '1900-02-19 00:00:00',
'1900-01-27 00:00:00', '1900-02-17 00:00:00',
'1900-02-09 00:00:00', '1900-02-08 00:00:00',
'1900-02-13 00:00:00', '1900-01-28 00:00:00',
'1900-02-03 00:00:00', '1900-01-30 00:00:00',
'1900-02-11 00:00:00', '1900-01-24 00:00:00',
'1900-02-05 00:00:00', '1900-01-18 00:00:00',
'1900-02-12 00:00:00', '1900-03-03 00:00:00',
'1900-02-02 00:00:00', '1900-02-24 00:00:00',
'1900-01-19 00:00:00', '1900-02-25 00:00:00',
'1900-02-27 00:00:00', '1900-03-02 00:00:00',
'1900-02-26 00:00:00', '1900-02-20 00:00:00',
'1900-01-17 00:00:00', '1900-03-05 00:00:00', 'SIN CONDUCTOR',
' HUYO', '6', '242', 'sd', '89', '96', '354', '7', '9',
'no proporciona', 'se retiró', 'Np', ' SD'], dtype=object
После удаления всех строк, которые не содержат числовых данных, код, который я использовал, чтобы попытаться разделить на диапазоны, выглядит следующим образом:
print(mty['V1_Edad'].head(50).to_dict())
{1: '57', 2: '34', 3: '27', 4: '39', 5: '35', 6: '39', 7: '28', 8: '32',
9: '34', 10: '27', 12: '45', 13: '35', 14: '44', 16: '79', 17: '44',
19: '50', 20: '45', 22: '33', 24: '40', 25: '40', 27: '23', 28: '22',
30: '37', 32: '20', 34: '53', 35: '18', 37: '21', 38: '26', 39: '53',
40: '36', 41: '24', 42: '48', 43: '50', 45: '36', 47: '49', 51: '66',
52: '35', 53: '27', 54: '33', 55: '21', 56: '33', 57: '37', 58: '27',
59: '36', 60: '43', 61: '54', 62: '37', 63: '53', 64: '67', 65: '19'}
total_count = mty.groupby('V1_Edad')['V1_Edad'].value_counts()
bins=[-1,15,40,60,80]
labels = ['0-15', '16-40', '41-60', '61-80']
Но все, что я получаю, — это таблица с 4 или 1, а не таблица с фактической группировкой и количеством данных.
Данные, которые я помещаю, являются уникальными значениями, потому что в кадре данных содержится более 2000 данных.
Что вы могли бы сделать, чтобы улучшить код?
Комментарии:
1. Ваш код не воспроизводим (создание фрейма данных)
2. Это уже исправлено, я просто хочу знать, как я могу разделить фрейм данных по возрастным группам в соответствии с данными столбца, который я поместил.
3. Ваша колонка имеет широкий спектр типов данных. Возможно, вам придется сначала отфильтровать числовые возрасты. Т. е.: даты-это не возраст, поэтому вы хотели бы сначала удалить их???
4. Да, я уже удалил все, кроме возраста, но все равно код для установки ячеек для меня не работает
5. Или
mty.head().to_dict()
. Ваш код все еще не воспроизводим…
Ответ №1:
Ваше описание все еще немного неясно, но вот пример использования ваших данных для получения кадра данных гистограммы numpy
. Я установил ваш словарь = d.
import numpy as np
df = pd.DataFrame.from_dict(d, orient='index', columns=['mycolumn'])
df['mycolumn'] = df['mycolumn'].astype('int')
bins=[-1,15,40,60,80]
labels = ['0-15', '16-40', '41-60', '61-80']
binned_values = np.histogram(df['mycolumn'], bins=bins)[0].tolist() # use [0] to just get the counts
df_hist = pd.DataFrame.from_dict(dict(zip(labels, binned_values)), orient='index').reset_index()
df_hist.columns = ['ranges', 'counts']
df_hist
ranges counts
0 0-15 0
1 16-40 31
2 41-60 16
3 61-80 3
использование панд для создания сюжета
histplot = pd.DataFrame.hist(df, column='mycolumn', bins=bins)
array([[<AxesSubplot:title={'center':'mycolumn'}>]], dtype=object)