[英]Python - Group / count a list of numbers by custom ranges
晚上好,
我希望你好好的。
我有一个数字列表,我想根据我定义的范围将其分组到“箱”或“桶”中。 我希望输出显示每个组“名称”以及该范围内的值总数。
例如 :-
my_list = [1, 123123, 12, 982023, 24, 446, 903, 2004]
示例标准
我显然可以通过编写多个条件 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.