簡體   English   中英

尋找一種從數據框中的列生成統計表的方法

[英]Looking for a way to produce a table of statistics from columns in a data frame

我有一個包含類別/代碼的數據集,例如,男性/女性,服務狀態,服務代碼,並且有一列已付款的索賠。

我正在尋找一種使用Python創建表/數據透視表的方式來生成輸出,其中我僅具有按服務代碼分類的平均已付費索賠的前10名最高列(即,具有最高平均已付費索賠的前10個代碼是什么)。 我還想附加中位數,stdev和計數,以便輸出看起來像

表:

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位的已付費索賠):

code, average claim, median claim, count claim
1234,  206, xxx, 3

因此,我做了類似的事情:

service_code_average=df.groupby('service_code', as_index=False)['paid claim'].mean().sort_values(by='paid claim')

我無法將排名限制在前10位,而且我還在努力增加媒體的數量。

在這里,您可以利用agg函數,在其中可以一次性指定多個聚合函數。 您可以執行以下操作:

# 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM