gpt4 book ai didi

Python 交叉表多个变量或行;人口统计表

转载 作者:太空宇宙 更新时间:2023-11-03 21:09:25 24 4
gpt4 key购买 nike

问题

我有一个类似的问题:Crosstab with multiple items但我不想在 R 中执行此操作,而是尝试在带有 Crosstab 的 Python Pandas 中执行此操作。

我一直在尝试使用Python Pandas crosstab 函数来制作人口统计表,但一次只能做一个人口统计表。换句话说,我想制作一个交叉表,其中所有行变量都处于同一级别。也许这不是交叉表的功能,而像 Pandas 数据透视表这样的东西会更好?

目前我使用以下三行代码,但认为可以通过某种方式将它们组合起来:

genderTable = pd.crosstab(refQtrData['GENDER'], [refQtrData['FUNDINGSOURCE'],refQtrData['PROVIDER'],refQtrData['LOCATION']], margins='true')
raceTable = pd.crosstab(refQtrData['RACETH4'], [refQtrData['FUNDINGSOURCE'],refQtrData['PROVIDER'],refQtrData['LOCATION']], margins='true')
ageTable = pd.crosstab(refQtrData['REFERRED'], [refQtrData['FUNDINGSOURCE'],refQtrData['PROVIDER'],refQtrData['LOCATION']], values=refQtrData['AGEREF'], aggfunc='mean')

我想做的事: Demographic Table

其他杂项信息

这最初是在 SPSS 中使用下面的代码完成的,但我试图将其移至 python。就像 SPSS CTABLES 允许我拥有多个类别和变量一样,我希望拥有对应于不同变量的多行,但它们不位于不同的级别。

CTABLES
/VLABELS VARIABLES= GENDER RACE AGE FUNDINGSOURCE PROVIDER LOCATION
DISPLAY=LABEL
/TABLE REFERRED [C][COUNT F40.0] + GENDER [C][COUNT F40.0, COLPCT.COUNT PCTPAREN40.0] + RACE
[C][COUNT F40.0, COLPCT.COUNT PCTPAREN40.0] + AGE [S][MEAN] + AGE [S][MINIMUM, MAXIMUM]
BY FUNDINGSOURCE [C] > PROVIDER [C] > LOCATION [C]
/SLABELS VISIBLE=NO
/CATEGORIES VARIABLES=GENDER RACE ORDER=A KEY=VALUE MISSING=INCLUDE EMPTY=INCLUDE
/CATEGORIES VARIABLES=FUNDINGSOURCE ORDER=A KEY=VALUE MISSING=INCLUDE EMPTY=EXCLUDE
/CATEGORIES VARIABLES=PROVIDER [1, 2] EMPTY=EXCLUDE
/CATEGORIES VARIABLES=LOCATION [1, 2] EMPTY=EXCLUDE.

最佳答案

如果没有可重现的示例,我们可以依靠 pandas crosstab 文档,其中复制/粘贴了一些示例交叉表。

import pandas as pd
import numpy as np

a = np.array(["foo", "foo", "foo", "foo", "bar", "bar","bar", "bar", "foo", "foo", "foo"], dtype=object)
b = np.array(["one", "one", "one", "two", "one", "one", "one", "two", "two", "two", "one"], dtype=object)
c = np.array(["dull", "dull", "shiny", "dull", "dull", "shiny", "shiny", "dull", "shiny", "shiny", "shiny"],dtype=object)
d = np.array(["1foo", "1foo", "1foo", "1foo", "1bar", "1bar","1bar", "1bar", "1foo", "1foo", "1foo"], dtype=object)

这给出了四个数组。制作交叉表。这将返回 DataFrame。

df1 =  pd.crosstab(a, [b, c], rownames=['aa'], colnames=['b', 'c'])
df2 = pd.crosstab(d, [b, c], rownames=['aa'], colnames=['b', 'c'])

使用 pandas.concat([],axis=...) 追踪 DataFrame

pd.concat([df1, df2], axis=0)
b one two
c dull shiny dull shiny
aa
bar 1 2 1 0
foo 2 2 1 2
1bar 1 2 1 0
1foo 2 2 1 2

>>> pd.concat([df1, df2], axis=1)
b one two one two
c dull shiny dull shiny dull shiny dull shiny
1bar NaN NaN NaN NaN 1.0 2.0 1.0 0.0
1foo NaN NaN NaN NaN 2.0 2.0 1.0 2.0
bar 1.0 2.0 1.0 0.0 NaN NaN NaN NaN
foo 2.0 2.0 1.0 2.0 NaN NaN NaN NaN

至于通过一个函数调用创建三个交叉表,请实现一个接受数据并返回串联交叉表的函数。不确定是否可以用合理的一句话来完成。

然后留下一个人进一步修改或以其他方式加入数据帧。

关于Python 交叉表多个变量或行;人口统计表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55168294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com