- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
使用 pandas,是否可以计算包含从两个不同函数计算的值的单个交叉表(或数据透视表)?
import pandas as pd
import numpy as np
c1 = np.repeat(['a','b'], [50, 50], axis=0)
c2 = list('xy'*50)
c3 = np.repeat(['G1','G2'], [50, 50], axis=0)
np.random.shuffle(c3)
c4=np.repeat([1,2], [50,50],axis=0)
np.random.shuffle(c4)
val = np.random.rand(100)
df = pd.DataFrame({'c1':c1, 'c2':c2, 'c3':c3, 'c4':c4, 'val':val})
frequencyTable = pd.crosstab([df.c1,df.c2],[df.c3,df.c4])
meanVal = pd.crosstab([df.c1,df.c2],[df.c3,df.c4],values=df.val,aggfunc=np.mean)
因此,两个表中的行和列都相同,但我真正想要的是同时包含频率和平均值的表:
c3 G1 G2
c4 1 2 1 2
c1 c2 freq val freq val freq val freq val
a x 6 0.624931 5 0.582268 8 0.528231 6 0.362804
y 7 0.493890 8 0.465741 3 0.613126 7 0.312894
b x 9 0.488255 5 0.804015 6 0.722640 5 0.369480
y 6 0.462653 4 0.506791 5 0.583695 10 0.517954
最佳答案
你可以给出一个函数列表:
pd.crosstab([df.c1,df.c2], [df.c3,df.c4], values=df.val, aggfunc=[len, np.mean])
如果您想要问题中显示的表格,则必须稍微重新排列级别:
In [42]: table = pd.crosstab([df.c1,df.c2], [df.c3,df.c4], values=df.val, aggfunc=[len, np.mean])
In [43]: table
Out[43]:
len mean
c3 G1 G2 G1 G2
c4 1 2 1 2 1 2 1 2
c1 c2
a x 4 6 8 7 0.303036 0.414474 0.624900 0.425234
y 5 5 8 7 0.543363 0.480419 0.583499 0.637657
b x 10 6 4 5 0.400279 0.436929 0.442924 0.287572
y 6 8 5 6 0.400427 0.623319 0.764506 0.408708
In [44]: table.reorder_levels([1, 2, 0], axis=1).sort_index(axis=1)
Out[44]:
c3 G1 G2
c4 1 2 1 2
len mean len mean len mean len mean
c1 c2
a x 4 0.303036 6 0.414474 8 0.624900 7 0.425234
y 5 0.543363 5 0.480419 8 0.583499 7 0.637657
b x 10 0.400279 6 0.436929 4 0.442924 5 0.287572
y 6 0.400427 8 0.623319 5 0.764506 6 0.408708
关于python - 如何在 pandas 的 crosstab/pivot_table 中使用两个不同的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18620199/
我有来自 Excel 工作表的数据,我在 Pandas 交叉表中进行了汇总。我想通过对相关行求和来进一步对数据进行分类。 这是我的交叉表: class_of_orbit Ellipti
我是 stackoverflow 的新手,我在尝试做这个主题时遇到了一些问题。报告。 表格示例 Group Client AtributeGroup1 Client1 Atribute1Gro
我在 MySQL 中有一个表,其中记录了学生注册的每一年的信息。我想生成一个查询,显示 yyyy 出生的 nnn 名学生,学年结束为 aaaa。我很快就完成了该查询,但令我困惑的是数据库中有一些重复的
我在 MySQL 中设置了一个查询,以返回结果,其中月份作为列标题,培训师姓名作为行标题。我正在尝试按月确定培训师的 NPS 分数。当我运行查询时,它仅显示上个月有调查结果的结果。如何修复查询以显示他
我在 postgres 中使用交叉表函数。基本 SQL 是: select distinct o_location, co_name, o_date,
两部分问题: 在 MySql 中生成交叉表结果时,Distinct 调用似乎不起作用...或者我遗漏了其他内容?我在几列中得到相同的 ClassName 。即“MDC(简介)”。 : SQLFiddl
如果有人能解决这个问题,那对我来说将是一个很大的帮助。我有一个 MySql 数据库表,其中包含以下记录: student_id subject_id scores s01
我有一个带有静态参数的典型交叉表查询。它适用于 createStatement。我想使用 preparestatement 来查询。 String query = "SELECT * FROM cro
这是我的输入: 身份证颜色 1个绿色 1 红色 1个橙子 1个绿色 1 红色 2红 2红 2 蓝色 3绿色 3红 这是我在输出中想要的 - 每种颜色的 ID 记录计数: ID绿红橙蓝 1 2 2 1
我正在寻求帮助,使用类似于 sumproduct 的函数从现有数据帧创建子数据帧。我想使用列标题将此表转换为一个小总和乘积: dan ste bob t1 0 2 0 t2 2
我正在尝试在 Postgres 中旋转一个表。我的表“示例”有很多列(代码、部门、项目、年份、期间、值、预购),而不是每行有 1 个概念、1 年、1 个值,我想要按年显示值的概念。从此; Item
我有一个 crosstab()查询类似于我上一个问题中的查询: Unexpected effect of filtering on result from crosstab() query 常见的情况
我有一个 crosstab() 查询,如下所示: SELECT * FROM crosstab( 'SELECT row_name, extra1, extra2..., another_table
我不能在这里发布我的原始查询,它太复杂了。所以我用一个示例查询来解释我的问题: 工作枢轴查询: Select pivot.* from public.crosstab($$ select 'na' a
上下文 我正在为一个站点运行车辆路径问题的变体。布局是这样的。您有取货点、卡车和正在取货的元素。真正的诀窍是客户一天的轮类次数不同,因此这是可定制的。所以我会在运行时知道这一点,但不会提前。我正在尝试
我有下表sample_events: Column | Type --------+----- title | text date | date 具有值: title | dat
在我的项目中,数据模型发生了变化,我必须执行一个新的请求来获取信息,但在过去看起来所有数据都在同一行中,但现在部分数据在另一个表中,它返回我的专栏。 所以我的请求返回: 我认为这很简单,但我真的不明白
早上好,我尝试使用 mysql/php 创建报告失败,我希望将行作为类似于 Access Crosstab 或 Excel Pivot 的列。我有销售人员和月销售额,我想在整个页面上显示,月份作为列标
我目前真的在为数据框而苦苦挣扎。通过运行代码:(res_sum = 数据框的名称) summary_table = pd.crosstab(index=[res_sum["Type"],res_sum
我正在用 pandas 制作一些交叉表: a = np.array(['foo', 'foo', 'foo', 'bar', 'bar', 'foo', 'foo'], dtype=object) b
我是一名优秀的程序员,十分优秀!