我正在慢慢地从R变成Python熊猫,我正面临一个我无法解决的问题……
我需要将一个列的值离散化,方法是将它们分配给bin并将这些bin名称的列添加到原始DataFrame中.我正在尝试使用pandas.qcut,但生成的Categorical对象似乎无法与DataFrame一起使用.
一个例子:
import pandas as pd df1 = pd.DataFrame(np.random.randn(10),columns=['a']) df1['binned_a'] = pd.qcut(df1['a'],4)
现在,当尝试在df1上调用describe时,我看不到新列:
>>> df1.describe() a count 10.000000 mean 0.594072 std 1.109981 min -0.807307 25% -0.304550 50% 0.545839 75% 1.189487 max 2.851922
但是,它显然是存在的:
>>> df1 a binned_a 0 0.190015 (-0.305,0.546] 1 0.140227 (-0.305,0.546] 2 1.380000 (1.189,2.852] 3 -0.522530 [-0.807,-0.305] 4 -0.452810 [-0.807,-0.305] 5 2.851922 (1.189,2.852] 6 -0.807307 [-0.807,-0.305] 7 0.901663 (0.546,1.189] 8 1.010334 (0.546,1.189] 9 1.249205 (1.189,2.852]
我究竟做错了什么?我想要的结果是获得一个包含4个唯一字符串值的列,用于描述二进制数(如R中的因子).
编辑:
解决方法
我从来都不是R用户,但如果我理解你,你想把数据分组到箱子里并描述每个箱子.
In [9]: df.groupby('binned_a').describe().unstack() Out[9]: a \ count mean std min 25% 50% binned_a (-0.113,0.109] 2 0.025114 0.010264 0.017856 0.021485 0.025114 (-0.337,-0.113] 2 -0.282838 0.056445 -0.322751 -0.302794 -0.282838 (0.109,0.563] 3 0.354481 0.214402 0.134978 0.250027 0.365076 [-1.842,-0.337] 3 -1.003969 0.765167 -1.841622 -1.335073 -0.828523 75% max binned_a (-0.113,0.109] 0.028742 0.032371 (-0.337,-0.113] -0.262882 -0.242925 (0.109,0.563] 0.464233 0.563390 [-1.842,-0.337] -0.585142 -0.341762