Python 正在寻找从数据帧中的列生成统计表的方法

Python 正在寻找从数据帧中的列生成统计表的方法,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,我有一个包含类别/代码的数据集,例如男性/女性、服务状态、服务代码,我有一列付费索赔 我正在寻找一种方法,使用Python创建一个表/透视图来生成输出,其中我只拥有按服务代码排列的平均付费索赔的前10个最高列(即,平均付费索赔最高的前10个代码是什么)。我还想添加中值,stdev,counts,这样输出看起来像 表: gender, code, state, paid claim F, 1234, TX, $300 F, 2345, NJ, $120 F, 3456, NJ, $30 M, 12

我有一个包含类别/代码的数据集,例如男性/女性、服务状态、服务代码,我有一列付费索赔

我正在寻找一种方法,使用Python创建一个表/透视图来生成输出,其中我只拥有按服务代码排列的平均付费索赔的前10个最高列(即,平均付费索赔最高的前10个代码是什么)。我还想添加中值,stdev,counts,这样输出看起来像

表:

gender, code, state, paid claim
F, 1234, TX, $300
F, 2345, NJ, $120
F, 3456, NJ, $30
M, 1234, MN, $250
M, 4567, CA, $50
F, 1234, MA, $70
F, 8901, CA, $150
F, 23457, NY, $160
F, 4567, SD, $125
我正在尝试生成的输出(按代码排列的前10名已付款索赔):

所以,我做了一些类似的事情:

service_code_average=df.groupby('service_code', as_index=False)['paid claim'].mean().sort_values(by='paid claim')
我无法限制到前10名,我正在努力添加媒体和计数。

在这里,您可以利用函数,一次指定多个聚合函数。您可以执行以下操作:

# convert string to integer
df['paid claim'] = df['paid claim'].str.extract('(\d+)')
df['paid claim'] = df['paid claim'].astype(int)

# set n value
top_n = 2 ## set this to 10 

# apply aggregation 
df1 = df.groupby('code').agg({'paid claim':{'average': lambda x: x.nlargest(top_n).mean(),
                                      'counts': lambda x: x.count(),
                                      'median': lambda x: x.median()}})

# reset column names
df1.columns = df1.columns.droplevel()
df1 = df1.reset_index()

print(df1)

    code  average  counts  median
0   1234    275.0       3   250.0
1   2345    120.0       1   120.0
2   3456     30.0       1    30.0
3   4567     87.5       2    87.5
4   8901    150.0       1   150.0
5  23457    160.0       1   160.0

你能添加一些数据样本和预期输出吗?除了.NLAGEST(top_n)之外,它还可以工作,它仍然能给我所有的结果。@阿伏加德罗只是想确定一下,你想知道基于平均支付索赔的前10位代码。对吗?在给定的表中,没有10个代码。我假设您的原始表将有更多的条目。对吧?我知道。我有大约5000个密码。我认为现在的情况是,它正在为每一个代码取顶级的平均值。所以取前2名(或前10名)的平均值,然后对每个代码执行。我希望获得代码所有值的平均值,但将输出限制为前10个最大的代码。使用df1.nsmallest(10,columns=['average'])修复了这一问题
# convert string to integer
df['paid claim'] = df['paid claim'].str.extract('(\d+)')
df['paid claim'] = df['paid claim'].astype(int)

# set n value
top_n = 2 ## set this to 10 

# apply aggregation 
df1 = df.groupby('code').agg({'paid claim':{'average': lambda x: x.nlargest(top_n).mean(),
                                      'counts': lambda x: x.count(),
                                      'median': lambda x: x.median()}})

# reset column names
df1.columns = df1.columns.droplevel()
df1 = df1.reset_index()

print(df1)

    code  average  counts  median
0   1234    275.0       3   250.0
1   2345    120.0       1   120.0
2   3456     30.0       1    30.0
3   4567     87.5       2    87.5
4   8901    150.0       1   150.0
5  23457    160.0       1   160.0