Python Pandas每行计算百分位数

时间:2017-01-03 14:52:29

标签: python pandas dataframe percentile

我有以下代码,并希望为每个事务编号和描述创建一个新列,表示每行的第99个百分位。

我真的很难实现这一目标 - 似乎大多数帖子都涵盖了计算列上的百分位数。

有没有办法实现这个目标?我希望用两行创建一个新列。

df_baseScenario = pd.DataFrame({'Transaction Number' : [1,10],
                            'Description'      :['asf','def'],
                            'Calc_PV_CF_2479.0':[4418494.085,-3706270.679],
                            'Calc_PV_CF_2480.0':[4415476.321,-3688327.494],
                            'Calc_PV_CF_2481.0':[4421698.198,-3712887.034],
                            'Calc_PV_CF_2482.0':[4420541.944,-3706402.147],
                            'Calc_PV_CF_2483.0':[4396063.863,-3717554.946],
                            'Calc_PV_CF_2484.0':[4397897.082,-3695272.043],
                            'Calc_PV_CF_2485.0':[4394773.762,-3724893.702],
                            'Calc_PV_CF_2486.0':[4384868.476,-3741759.048],
                            'Calc_PV_CF_2487.0':[4379614.337,-3717010.873],
                            'Calc_PV_CF_2488.0':[4389307.584,-3754514.639],
                            'Calc_PV_CF_2489.0':[4400699.929,-3741759.048],
                            'Calc_PV_CF_2490.0':[4379651.262,-3714723.435]})    

2 个答案:

答案 0 :(得分:2)

以下内容应该有效:

df['99th_percentile'] = df[cols].apply(lambda x: numpy.percentile(x, 99), axis=1)

我在这里假设变量' cols'包含要包含在百分位数中的列的列表(例如,您显然无法在计算中使用“描述”)。

此代码的作用是在数据框中的行上循环,并且对于每一行,计算numpy.percentile以获得第99个百分位数。你需要导入numpy。

如果你需要最大速度,那么你可以使用numpy.vectorize以牺牲可读性为代价来删除所有循环(未经测试):

perc99 = np.vectorize(lambda x: numpy.percentile(x, 99))
df['99th_percentile'] = perc99(df[cols].values)

答案 1 :(得分:0)

从@mxbi略微修改。

...\setup.exe not found