python – 创建具有计数和百分比的列联表Pandas

python – 创建具有计数和百分比的列联表Pandas,第1张

概述有没有更好的方法在pandas中使用pd.crosstab()或pd.pivot_table()创建列联表,以生成计数百分比. 当前解决方案 cat=['A','B','B','A','B','B','A','A','B','B']target = [True,False,False,False,True,True,False,True,True,True]import pandas as 有没有更好的方法在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=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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1196114.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存