我的Pandas兰达地图有什么不对?

2024-06-16 17:35:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图找到第二个数据帧中的观测值所属的数据帧的百分位,我认为lambda函数可以实现如下效果:

df1.var1.map(lambda x: np.percentile(df2.var1, x))

对于序列df1.var1中的每个x,应用函数np.percentile(df2.var1, x),它可以找到序列df2.var1x的百分位。因为某种原因,我得到了错误

^{2}$

{cd6>指的是长度。你知道我做错了什么吗?在

完全错误:

ValueError                                Traceback (most recent call last)
<ipython-input-82-02d5cacfecd4> in <module>()
----> 1 df1.var1.map(lambda x: np.percentile(df2.var1, x))
   C:\Users\ngudat\AppData\Local\Continuum\Anaconda\lib\site-packages\pandas\core\series.pyc in map(self, arg, na_action)
   2043                                      index=self.index).__finalize__ (self)
   2044         else:
-> 2045             mapped = map_f(values, arg)
   2046             return self._constructor(mapped,
   2047                                      index=self.index).__finalize__(self)

pandas\src\inference.pyx in pandas.lib.map_infer (pandas\lib.c:62187)()

<ipython-input-82-02d5cacfecd4> in <lambda>(x)
----> 1 df.qof.map(lambda x: np.percentile(prac_prof.qof, x))

C:\Users\ngudat\AppData\Local\Continuum\Anaconda\lib\site-packages\numpy\lib\function_base.pyc in percentile(a, q, axis, out, overwrite_input, interpolation, keepdims)
   3266     r, k = _ureduce(a, func=_percentile, q=q, axis=axis, out=out,
   3267                     overwrite_input=overwrite_input,
-> 3268                     interpolation=interpolation)
   3269     if keepdims:
   3270         if q.ndim == 0:

C:\Users\ngudat\AppData\Local\Continuum\Anaconda\lib\site-packages\numpy\lib\function_base.pyc in _ureduce(a, func, **kwargs)
   2995         keepdim = [1] * a.ndim
   2996 
-> 2997     r = func(a, **kwargs)
   2998     return r, keepdim
   2999 

C:\Users\ngudat\AppData\Local\Continuum\Anaconda\lib\site-packages\numpy\lib\function_base.pyc in _percentile(a, q, axis, out, overwrite_input, interpolation, keepdims)
   3370         weights_above.shape = weights_shape
   3371 
-> 3372         ap.partition(concatenate((indices_below, indices_above)),axis=axis)
   3373 
   3374         # ensure axis with qth is first

ValueError: kth(=-9223372036854775599) out of bounds (209)

Tags: lambdainselfmapinputlibnpout
1条回答
网友
1楼 · 发布于 2024-06-16 17:35:08

百分位数不会给你你所需要的,它需要一个百分位数,然后给你一个值。你需要的恰恰相反。您应该对列中的条目进行排序,然后根据该列计算百分位数:

import pandas as pd
aa = [1,3,2,4,11,8,9]
dd = pd.DataFrame(data=aa,columns=['xx'])
dd['rank']=dd['xx'].rank()
dd['percentile'] = dd['rank']/len(dd)

这将为您提供每个条目对应的百分位数:

^{pr2}$

相关问题 更多 >