当前解决方案
cat=['A','B','A','B']target = [True,False,True,True]import pandas as pddf=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.columnsOut[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]: sOut[134]: cat sum count0 A 2.0 41 B 4.0 6In [135]: s['pctTrue'] = s['sum']/s['count']In [136]: s['pctFalse'] = 1 - s.pctTrueIn [137]: sOut[137]: cat sum count pctTrue pctFalse0 A 2.0 4 0.500000 0.5000001 B 4.0 6 0.666667 0.333333总结
以上是内存溢出为你收集整理的python – 创建具有计数和百分比的列联表Pandas全部内容,希望文章能够帮你解决python – 创建具有计数和百分比的列联表Pandas所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)