Как найти количество значений в диапазоне целых чисел в столбце фрейма данных в python pandas - PullRequest
1 голос
/ 03 марта 2020

Итак, у меня есть этот большой массив данных со множеством столбцов, таких как возраст, имя, пол и т. Д. c.

Я хочу создать новый столбец с возрастной группой 1-10, 11-20, 21-30, ..., 71-80

Я пытался сделать

ranges = [1, 10, 20, 30, 40, 50, 60, 70, 80]
df.age.groupby(pd.cut(df.age, ranges)).count()

, и в результате получается

age
(1, 10]      64
(10, 20]    162
(20, 30]    361
(30, 40]    210
(40, 50]    132
(50, 60]     62
(60, 70]     27
(70, 80]      6
Name: age, dtype: int64

, это именно то, что я хотел, но группы неверны. Я хочу, чтобы это было 1-10, а затем 11-20, а не 1-10 и 10-20. Кто-нибудь может помочь мне решить эту проблему?

1 Ответ

1 голос
/ 03 марта 2020

Я думаю, что сначала необходимо объяснить комментарием @samthegolden:

(10, 20] означает «от 10 до 20, исключая 10 и включая 20» из-за формата скобок.

Но вы можете сделать это с помощью параметра labels, созданного ranges с zip в понимании списка:

np.random.seed(2020)
df = pd.DataFrame({'age':np.random.randint(1, 80, size=100)})

ranges = [1, 10, 20, 30, 40, 50, 60, 70, 80]
labels = ['{}-{}'.format(i + 1, j) for i, j in zip(ranges[:-1], ranges[1:])] 
labels[0] = '{}-{}'.format(ranges[0], ranges[1])
print (labels)
['1-10', '11-20', '21-30', '31-40', '41-50', '51-60', '61-70', '71-80']

ranges = [1, 10, 20, 30, 40, 50, 60, 70, 80]
s = df.age.groupby(pd.cut(df.age, ranges, labels=labels)).count()
print (s)

age
1-10     14
11-20    10
21-30    15
31-40    12
41-50     7
51-60    11
61-70    18
71-80    12
Name: age, dtype: int64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...