我试图在Pandas df中为两个不同的组获取分位数。我能够应用分位数功能并得到一个包含分组结果的表格,但是,我似乎无法在数据帧上调用groupby属性。例如:
rand = np.random.RandomState(1)
df = pd.DataFrame({'A': ['foo', 'bar'] * 3,
'B': rand.randn(6),
'C': rand.randint(0, 20, 6)})
gb = df.groupby(['A'])
gb.groups
返回类似于:
的内容{'bar': [1, 3, 5], 'foo': [0, 2, 4]}
然后我应用分位数函数:
q=gb.quantile(np.arange(0,1.1,.1))
当我打印这个df时,它显示了两个组,但是当我尝试调用它们时,它会抛出一个错误:
q.group
AttributeError: 'DataFrame' object has no attribute 'group'
如何在分位数数据框中调用组?
答案 0 :(得分:2)
(首先,请注意您的代码丢失
import numpy as np
import numpy.random as rand
或类似的东西。第二个猜测有点烦人。)
你的两行
gb = df.groupby(['A'])
q=gb.quantile(np.arange(0,1.1,.1))
等同于
q=df.groupby(['A']).quantile(np.arange(0,1.1,.1))
换句话说,q
已经是在每个组上应用分位数的结果。您要查找的结果是q
本身:
>>> q
B C
A
bar 0.0 -1.311556 13.0
0.1 -1.188745 13.2
0.2 -1.065935 13.4
0.3 -0.943124 13.6
0.4 -0.820313 13.8
0.5 -0.697503 14.0
0.6 -0.662497 14.4
0.7 -0.627492 14.8
0.8 -0.592486 15.2
0.9 -0.557481 15.6
1.0 -0.522475 16.0
foo 0.0 0.032946 1.0
0.1 0.051352 4.0
0.2 0.069759 7.0
0.3 0.088166 10.0
0.4 0.106572 13.0
0.5 0.124979 16.0
0.6 0.388895 16.2
0.7 0.652811 16.4
0.8 0.916728 16.6
0.9 1.180644 16.8
1.0 1.444560 17.0
答案 1 :(得分:0)
您可以使用索引调用特定组:
q.loc['foo']