加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读