【问题标题】:Pandas calculate number of values between each range熊猫计算每个范围之间的值数
【发布时间】:2016-05-05 00:13:08
【问题描述】:

我想在某些自定义范围内查找我的数据计数。

假设我有一些数据:

import random

my_randoms = random.sample(xrange(100), 10)        
test = pd.DataFrame(my_randoms,columns = ["x"])

如何生成显示不同范围之间值数量的数据框?例如,假设我想查看 0-19、20-39、40-59、60-79、80-100 之间出现了多少个值。输出数据框将有一列包含这些范围,另一列包含计数。

我可以想到一些丑陋的方法,这些方法涉及使用 .apply 来获取一个新的列列表,说明它们之间的值(然后执行 groupby),但我怀疑 pandas 有一种更简洁的方法。

【问题讨论】:

标签: python pandas


【解决方案1】:

可能有更好的方法。我自己只是熊猫新手,但目前如何:

test.query(test.x.isin(range(20)))

【讨论】:

    【解决方案2】:

    pandas 和 numpy 允许 布尔索引, 这是一种丑陋的方法吗?

    ranges = [ (0,19), (20, 39), (40, 69) ...]
    cnt = []
    for range in ranges:
        tmp = ranges[(ranges['x'] > range[0]) & (range['x'] <= range[1]) ]
        cnt.append( len(tmp) )
    

    【讨论】:

    • 突然想起numpy.histogram这个解决方案。这比我想的要好。
    【解决方案3】:

    根据 Jarad 指向其他问题的链接:

    test.groupby(pd.cut(test['x'], np.arange(0,100,20))).count()
    

    【讨论】:

      【解决方案4】:

      您可以使用numpy.histrogram 函数。

      import numpy as np
      series = [0, 20, 40, ...]
      count, bin_edge = np.histogram( bins = series )
      

      根据numpy.histogram,如果bins是一个序列,它定义了bin边缘,包括最右边的边缘,允许不均匀的bin宽度。

      【讨论】:

        猜你喜欢
        • 2022-12-01
        • 2019-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-09
        • 2020-11-09
        • 1970-01-01
        相关资源
        最近更新 更多