Python Pandas 计算每行的百分位数

标签 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]})    

最佳答案

以下应该有效:

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)

关于Python Pandas 计算每行的百分位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41446192/

相关文章:

python - 查找特定的顺序模式

r - 如果它们不是 NA,则将一列粘贴到所有其他列

python - 给定另一个数据帧中两列的值约束,查找一个数据帧的一列中的最大值

python - opencv 3 中缺少 detectMultiScale 函数

Python:如何创建 for 循环来更改 dict 值并将其附加到列表中?

python - 将 numpy 数组转换为类别

带有 sqlalchemy 的 Python Pandas |批量插入错误

python - 合并两个pandas DataFrame

python - 如何在Python中逐个复制输入文件ch并使用格式?

python - 重新采样 Pandas 数据帧而不填充缺失时间