pandas 查找给定列的百分位统计信息

brqmpdu1  于 2023-04-10  发布在  其他
关注(0)|答案(6)|浏览(260)

我有一个pandas数据框架my_df,在这里我可以找到给定列的mean(),median(),mode():

my_df['field_A'].mean()
my_df['field_A'].median()
my_df['field_A'].mode()

我想知道是否有可能找到更详细的统计数据,如90百分位?谢谢!

y3bcpkx1

y3bcpkx11#

  • 可以使用pandas.DataFrame.quantile()函数。
  • 如果你查看quantile()的API,你会看到它需要一个参数来进行插值。如果你想要一个位于数据中两个位置之间的分位数:
  • “线性”、“较低”、“较高”、“中点”或“最近”。
  • 默认情况下,它执行线性插值。
  • 这些插值方法在percentile的Wikipedia文章中讨论
import pandas as pd
import numpy as np

# sample data 
np.random.seed(2023)  # for reproducibility
data = {'Category': np.random.choice(['hot', 'cold'], size=(10,)),
        'field_A': np.random.randint(0, 100, size=(10,)),
        'field_B': np.random.randint(0, 100, size=(10,))}
df = pd.DataFrame(data)

df.field_A.mean()  # Same as df['field_A'].mean()
# 51.1

df.field_A.median() 
# 50.0

# You can call `quantile(i)` to get the i'th quantile,
# where `i` should be a fractional number.

df.field_A.quantile(0.1)  # 10th percentile
# 15.6

df.field_A.quantile(0.5)  # same as median
# 50.0

df.field_A.quantile(0.9)  # 90th percentile
# 88.8

df.groupby('Category').field_A.quantile(0.1)
#Category
#cold    28.8
#hot      8.6
#Name: field_A, dtype: float64

df

Category  field_A  field_B
0     cold       96       58
1     cold       22       28
2      hot       17       81
3     cold       53       71
4     cold       47       63
5      hot       77       48
6     cold       39       32
7      hot       69       29
8      hot       88       49
9      hot        3       49
q7solyqu

q7solyqu2#

假设系列s

s = pd.Series(np.arange(100))

获取[.1, .2, .3, .4, .5, .6, .7, .8, .9]的分位数

s.quantile(np.linspace(.1, 1, 9, 0))

0.1     9.9
0.2    19.8
0.3    29.7
0.4    39.6
0.5    49.5
0.6    59.4
0.7    69.3
0.8    79.2
0.9    89.1
dtype: float64

s.quantile(np.linspace(.1, 1, 9, 0), 'lower')

0.1     9
0.2    19
0.3    29
0.4    39
0.5    49
0.6    59
0.7    69
0.8    79
0.9    89
dtype: int32
8mmmxcuj

8mmmxcuj3#

我发现下面会工作:

my_df.dropna().quantile([0.0, .9])
57hvy0tb

57hvy0tb4#

您甚至可以给予多个具有空值的列,并获得多个分位数值(我使用95%进行离群值处理)

my_df[['field_A','field_B']].dropna().quantile([0.0, .5, .90, .95])
ovfsdjhp

ovfsdjhp5#

一种非常简单有效的方法是调用特定列上的describe函数

df['field_A'].describe()

这将给予平均值、最大值、中位数和第75百分位数

erhoui1w

erhoui1w6#

Describe会给予你四分位数,如果你想要百分位数,你可以这样做

df['YOUR_COLUMN_HERE'].describe(percentiles=[.1, .2, .3, .4, .5, .6 , .7, .8, .9, 1])

相关问题