Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当数据中存在关联时,如何计算熊猫中的分位数箱?_Python_Pandas_Scipy_Statistics_Stata - Fatal编程技术网

Python 当数据中存在关联时,如何计算熊猫中的分位数箱?

Python 当数据中存在关联时,如何计算熊猫中的分位数箱?,python,pandas,scipy,statistics,stata,Python,Pandas,Scipy,Statistics,Stata,考虑下面的简单示例。我感兴趣的是得到一个分类变量,它包含与分位数对应的类别 df = pd.DataFrame({'A':'foo foo foo bar bar bar'.split(), 'B':[0, 0, 1]*2}) df Out[67]: A B 0 foo 0 1 foo 0 2 foo 1 3 bar 0 4 bar 0 5 bar 1 在Pandas中,qtile执行此任务。不幸的是,q

考虑下面的简单示例。我感兴趣的是得到一个分类变量,它包含与分位数对应的类别

  df = pd.DataFrame({'A':'foo foo foo bar bar bar'.split(),
                       'B':[0, 0, 1]*2})

df
Out[67]: 
     A  B
0  foo  0
1  foo  0
2  foo  1
3  bar  0
4  bar  0
5  bar  1
在Pandas中,
qtile
执行此任务。不幸的是,
qtile
将在此处失败,因为数据中存在连接

df['C'] = df.groupby(['A'])['B'].transform(
                     lambda x: pd.qcut(x, 3, labels=range(1,4)))
给出经典的
ValueError:Bin边必须唯一:数组([0,0,0.33333333,1.])

是否有另一个不需要重新发明轮子的健壮解决方案(来自任何其他python包)

一定是这样。我不想自己编写自己的分位数bin函数。任何像样的统计数据包都可以在创建分位数箱时处理关系(
SAS
Stata
,等等)

我想要一种基于合理方法选择和稳健的方法

例如,在这里查找SAS中的解决方案

或者在这里查看Stata()中众所周知的xtile。请注意这篇文章

我错过了什么?可能使用
Scipy

非常感谢

IIUC,您可以使用


谢谢@NickilMaveli,但它似乎是
numpy.digitized
不创建分位数仓,而是创建线性间隔仓。在这种情况下,您可以将
pd.quantile()
方法的输出传递到
np.digized
函数。如果存在非唯一值,那么它将分配与最后一个四分位数(这里是3)关联的整数。这确实是一个很好的建议。不幸的是,我认为把它们放在最小的四分位数更为常见。。也许还有另一种解决办法。。
df['C'] = df.groupby(['A'])['B'].transform(lambda x: np.digitize(x,bins=np.array([0,1,2])))

     A  B  C
0  foo  0  1
1  foo  0  1
2  foo  1  2
3  bar  0  1
4  bar  0  1
5  bar  1  2