有没有一种简单的方法来获取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)
答案 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]]