gpt4 book ai didi

python - 将 stats.percentileofscore 按列应用于每一行

转载 作者:太空宇宙 更新时间:2023-11-04 01:59:02 24 4
gpt4 key购买 nike

df=

1
5
34
5
67
8
98

我需要一个新列,其中包含每个元素相对于该列的百分位数。最终答案应该是这样的。我希望将 stats.percentileofscore() 函数的输出输入到 pcntle_rank 列中。我考虑过以某种方式使用 apply 但如何将所需的函数参数传递给 percentileofscore?

df =

value    pcntle_rank
1 stats.percentileofscore(df['value'], df['value'][1])
5 stats.percentileofscore(df['value'], df['value'][2])
34 stats.percentileofscore(df['value'], df['value'][3])
5 stats.percentileofscore(df['value'], df['value'][4])
67 stats.percentileofscore(df['value'], df['value'][5])
8 stats.percentileofscore(df['value'], df['value'][6])
98 stats.percentileofscore(df['value'], df['value'][7])

这是我的尝试。我想在没有循环的情况下执行此操作。真实数据有 50 列和 4000 行。我需要对每一列和每一行执行此操作。

  for i in range(df.shape[0]):
df['pcntle_rank'][i] = stats.percentileofscore(df.loc[:,['value']],df['value'][i])

我的循环给出了结果,但我想在没有 for 循环的情况下完成。

最佳答案

Series.rank

使用 pct=True,这相当于使用默认 kind='rank' 的 stats.percentileofscore

df[0].rank(pct=True)*100
#0 14.285714
#1 35.714286
#2 71.428571
#3 35.714286
#4 85.714286
#5 57.142857
#6 100.000000
#Name: 0, dtype: float64

from scipy import stats

for idx, val in df[0].iteritems():
print(f'{val}: {stats.percentileofscore(df[0], score=val)}')

#1 : 14.285714285714286
#5 : 35.714285714285715
#34 : 71.42857142857143
#5 : 35.714285714285715
#67 : 85.71428571428571
#8 : 57.142857142857146
#98 : 100.0

关于python - 将 stats.percentileofscore 按列应用于每一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56115481/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com