如何在pandas.cut中获得合适的关卡表示?

时间:2014-05-26 23:25:53

标签: python pandas indexing

有没有一种简单的方法来获取pandas.cut生成的级别的值?

例如:

import pandas as pd
x = pd.cut(np.arange(0,20), 10)

x
Out[1]: 
 (-0.019, 1.9]
 (-0.019, 1.9]
    (1.9, 3.8]
    (1.9, 3.8]
    (3.8, 5.7]
    (3.8, 5.7]
    (5.7, 7.6]
    (5.7, 7.6]
    (7.6, 9.5]
    (7.6, 9.5]
   (9.5, 11.4]
   (9.5, 11.4]
  (11.4, 13.3]
  (11.4, 13.3]
  (13.3, 15.2]
  (13.3, 15.2]
  (15.2, 17.1]
  (15.2, 17.1]
    (17.1, 19]
    (17.1, 19]
Levels (10): Index(['(-0.019, 1.9]', '(1.9, 3.8]', '(3.8, 5.7]',
                    '(5.7, 7.6]', '(7.6, 9.5]', '(9.5, 11.4]',
                    '(11.4, 13.3]', '(13.3, 15.2]', '(15.2, 17.1]',
                    '(17.1, 19]'], dtype=object)

我想得到的是:

x.magic_method
Out[2]:
[[-0.019, 1.9], [1.9, 3.8], [3.8, 5.7],
                        [5.7, 7.6], [7.6, 9.5], [9.5, 11.4],
                        [11.4, 13.3], [13.3, 15.2], (15.2, 17.1],
                        [17.1, 19]]

或其他更适合操纵的表示。相反,我们使用x.levels获取索引,但是这个表示是一个unicode对象,所以我必须使用几个循环来获得我想要的东西。

更新

顺便说一下,我需要一个在第二个参数中使用一系列值的解决方案:pd.cut(np.arange(0,20), arr)

2 个答案:

答案 0 :(得分:2)

您可以通过以下代码将unicode列表转换为数组:

import pandas as pd
x = pd.cut(np.arange(0,20), 10)
np.array(map(lambda t:t[1:-1].split(","), x.levels), float)

答案 1 :(得分:1)

你可以做到这一点,但更好地解释你实际在做什么;例如你已经拥有了分类变量。

In [27]: x, bins = pd.cut(np.arange(0,20), 10, retbins=True)

In [28]: [ [ round(l,3), round(r,3) ] for l, r in zip(bins[:-1],bins[1:]) ]
Out[28]: 
[[-0.019, 1.9],
 [1.9, 3.8],
 [3.8, 5.7],
 [5.7, 7.6],
 [7.6, 9.5],
 [9.5, 11.4],
 [11.4, 13.3],
 [13.3, 15.2],
 [15.2, 17.1],
 [17.1, 19.0]]