我试图从数据帧计算特定的分位数值,如下面的代码所示.在单独的行中计算它没有问题.
当试图运行最后2行时,我收到错误"AttributeError:'SeriesGroupBy'对象没有属性'分位数(0.25)'".我怎样才能解决这个问题?
AttributeError: 'SeriesGroupBy' object has no attribute 'quantile(0.25)'
Run Code Online (Sandbox Code Playgroud)
WeN*_*Ben 19
我更喜欢def功能
def q1(x):
return x.quantile(0.25)
def q2(x):
return x.quantile(0.75)
f = {'number': ['median', 'std', q1,q2]}
df1 = df.groupby('x').agg(f)
df1
Out[1643]:
number
median std q1 q2
x
0 52500 17969.882211 40000 61250
1 43000 16337.584481 35750 55000
Run Code Online (Sandbox Code Playgroud)
@WeNYoBen的回答很棒。但是有一个限制,那就是需要为每个分位数创建一个新函数。如果分位数的数量变大,这可能是一个非常非 Python 的练习。更好的方法是使用函数来创建函数,并适当地重命名该函数。
def rename(newname):
def decorator(f):
f.__name__ = newname
return f
return decorator
def q_at(y):
@rename(f'q{y:0.2f}')
def q(x):
return x.quantile(y)
return q
f = {'number': ['median', 'std', q_at(0.25) ,q_at(0.75)]}
df1 = df.groupby('x').agg(f)
df1
Out[]:
number
median std q0.25 q0.75
x
0 52500 17969.882211 40000 61250
1 43000 16337.584481 35750 55000
Run Code Online (Sandbox Code Playgroud)
重命名装饰器重命名函数,以便pandas agg 函数可以处理返回的分位数函数的重用(否则所有分位数结果最终都在名为q 的列中)。
| 归档时间: |
|
| 查看次数: |
9528 次 |
| 最近记录: |