- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个类似的问题: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/
两个表 - posts 和 users posts.user 列与 users.id 匹配。 我想统计所有用户的所有帖子,这样: user1 5 user2 3 user3 9 ...等等,这意味着
我是Python新手(使用Python3.6),我学习它主要是为了能够为此页面构建一个抓取工具 http://www.nhl.com/stats/player?aggregate=0&gameType
我是一名优秀的程序员,十分优秀!