【发布时间】:2016-10-11 15:39:12
【问题描述】:
鉴于此数据框和数据透视表:
import pandas as pd
df=pd.DataFrame({'County':['A','A','A','A','A','B','B','B','B','A','A','A','A','A','B','B','B','B'],
'Hospital':['a','b','c','d','e','a','b','c','e','a','b','c','d','e','a','b','c','e'],
'Enrollment':[44,55,42,57,95,54,27,55,81,54,65,23,89,76,34,12,1,67],
'Year':['2012','2012','2012','2012','2012','2012','2012','2012','2012','2013',
'2013','2013','2013','2013','2013','2013','2013','2013']})
d2=pd.pivot_table(df,index='Year',columns=['County','Hospital'])
d2
Enrollment
County A B
Hospital a b c d e a b c e
Year
2012 44 55 42 57 95 54 27 55 81
2013 54 65 23 89 76 34 12 1 67
我想做以下事情:
-
计算最近一年的医院“入院率”(每个县),如下所示:
Enrollment County A B Hospital a b c d e a b c e Year 2012 44 55 42 57 95 54 27 55 81 2013 54 65 23 89 76 34 12 1 67 Percent 18% 21% 7% 29% 25% 30% 11% 1% 59% -
按最近一年的“注册”(降序)对列进行排序,如下所示:
Enrollment County A B Hospital d e b a c e a b c Year 2012 57 95 55 44 42 81 54 27 55 2013 89 76 65 54 23 67 34 12 1 Percent 29% 25% 21% 18% 7% 59% 30% 11% 1% -
以每个县的前 3 家医院(就最近一年的入学人数而言)如下:
Enrollment County A B Hospital d e b e a b Year 2012 57 95 55 81 54 27 2013 89 76 65 67 34 12 Percent 29% 25% 21% 59% 30% 11%
提前致谢!
附:到目前为止,我已经尝试通过转置和使用最近一年的县和最右边的列进行排序:
cnty=d2.T.index.names[1]
ryr=d2.T.columns[-1]
d2.T.sort_values([cnty,ryr],ascending=False)
...但我知道我需要以不同的方式访问“县”,因为它不是真正的列。
更新:
我可以通过转置和使用 group by 来计算最近一年的百分比(并过滤掉),但我确信有更有效的方法。
d=d2.T
d['Percent']=(d.iloc[:,-1]/d.iloc[:,-1].sum()*100)
提前致谢!
【问题讨论】:
标签: python sorting pandas pivot-table percentage