繁体   English   中英

Python - 按自定义范围对数字列表进行分组/计数

[英]Python - Group / count a list of numbers by custom ranges

晚上好,

我希望你好好的。

我有一个数字列表,我想根据我定义的范围将其分组到“箱”或“桶”中。 我希望输出显示每个组“名称”以及该范围内的值总数。

例如 :-

my_list = [1, 123123, 12, 982023, 24, 446, 903, 2004]

示例标准

  • 大于 250,000(输出:1)
  • 大于 100,000 但小于或等于 250,000(输出:1)
  • 大于 10,000 但小于或等于 100,000(输出:0)
  • 大于 1,000 但小于或等于 10,000(输出:1)
  • 大于 100 但小于或等于 1000(输出:2)
  • 小于 100(输出:3)

我显然可以通过编写多个条件 if 语句以非常粗略的方式实现这一点,但我知道必须有一种更优雅的方式来实现结果。

各种搜索表明我可以使用 pandas.cut / digitize 来实现这一点,但是到目前为止,我未能成功实现所需的输出。

任何帮助将不胜感激。

非常感谢

詹姆士

你是对的,你可以使用pd.cut结合 groupby 来实现你想要的。

第 1 步:定义数据

import pandas as pd
import numpy as np

my_list = [1, 123123, 12, 982023, 24, 446, 903, 2004]
df = pd.DataFrame(my_list, columns=['data'])
cut_edges = np.array([-np.inf, 100, 1000, 10000, 100000, 250000, np.inf])
labels = ['less than 100', 'between 100 and 1,000', 'between 1,000 and 10,000', 'between 10,000 and 100,000', 'between 100,000 and 250,000', 'greater than 250,000']

第二步:使用pd.cut生成类别名称,稍后为groupby设置索引

df['category'] = pd.cut(df['data'], cut_edges, labels=labels)
df.set_index('category', append=False, inplace=True)

第 3 步:groupby 进行计数

df.groupby(level='category').count()

输出:

在此处输入图像描述

编辑

正如评论中指出的numpy.histogram是另一种可能更简洁的方法。 这个答案使用了问题中特别提到的pd.cut

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM