python – 创建具有计数和百分比的列联表Pandas
发布时间:2020-12-20 13:10:53 所属栏目:Python 来源:网络整理
导读:有没有更好的方法在pandas中使用pd.crosstab()或pd.pivot_table()创建列联表,以生成计数和百分比. 当前解决方案 cat=['A','B','A','B']target = [True,False,True,True]import pandas as pddf=pd.DataFrame({'cat' :cat,'target':target}) 使用交叉表 totals
有没有更好的方法在pandas中使用pd.crosstab()或pd.pivot_table()创建列联表,以生成计数和百分比.
当前解决方案 cat=['A','B','A','B'] target = [True,False,True,True] import pandas as pd df=pd.DataFrame({'cat' :cat,'target':target}) 使用交叉表 totals=pd.crosstab(df['cat'],df['target'],margins=True).reset_index() percentages = pd.crosstab(df['cat'],df['target']).apply(lambda row: row/row.sum(),axis=1).reset_index() 合并 summaryTable=pd.merge(totals,percentages,on="cat") summaryTable.columns=['cat','#False','#True','All','percentTrue','percentFalse'] 产量 +---+-----+--------+-------+-----+-------------+--------------+ | | cat | #False | #True | All | percentTrue | percentFalse | +---+-----+--------+-------+-----+-------------+--------------+ | 0 | A | 2 | 2 | 4 | 0.500000 | 0.500000 | | 1 | B | 2 | 4 | 6 | 0.333333 | 0.666667 | +---+-----+--------+-------+-----+-------------+--------------+ 解决方法
你可以做到以下几点:
In [131]: s = df.groupby('cat').agg({'target': ['sum','count']}).reset_index(level=0) In [132]: s.columns Out[132]: MultiIndex(levels=[['target','cat'],['sum','count','']],labels=[[1,0],[2,1]]) 让我们为列名命令: In [133]: s.columns = [col[1] if col[1] else col[0] for col in s.columns.tolist()] In [134]: s Out[134]: cat sum count 0 A 2.0 4 1 B 4.0 6 In [135]: s['pctTrue'] = s['sum']/s['count'] In [136]: s['pctFalse'] = 1 - s.pctTrue In [137]: s Out[137]: cat sum count pctTrue pctFalse 0 A 2.0 4 0.500000 0.500000 1 B 4.0 6 0.666667 0.333333 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |