首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为pandas数据透视表中的每个值列定义aggfunc

为pandas数据透视表中的每个值列定义aggfunc
EN

Stack Overflow用户
提问于 2013-11-21 19:14:46
回答 3查看 38.1K关注 0票数 22

正在尝试生成一个包含多个"values“列的数据透视表。我知道我可以使用aggfunc以我想要的方式聚合值,但是如果我不想对两列进行求和或求平均值,而是想要一列的和和另一列的平均值,那该怎么办?那么,有没有可能用熊猫做到这一点呢?

代码语言:javascript
运行
复制
df = pd.DataFrame({
          'A' : ['one', 'one', 'two', 'three'] * 6,
          'B' : ['A', 'B', 'C'] * 8,
          'C' : ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 4,
          'D' : np.random.randn(24),
          'E' : np.random.randn(24)
})

现在,这将得到一个带有sum的数据透视表:

代码语言:javascript
运行
复制
pd.pivot_table(df, values=['D','E'], rows=['B'], aggfunc=np.sum)

这是mean的意思:

代码语言:javascript
运行
复制
pd.pivot_table(df, values=['D','E'], rows=['B'], aggfunc=np.mean)

如何获得D的sum和E的mean

希望我的问题足够清楚。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-21 19:50:25

您可以concat two DataFrames

代码语言:javascript
运行
复制
>>> df1 = pd.pivot_table(df, values=['D'], rows=['B'], aggfunc=np.sum)
>>> df2 = pd.pivot_table(df, values=['E'], rows=['B'], aggfunc=np.mean)
>>> pd.concat((df1, df2), axis=1)
          D         E
B                    
A  1.810847 -0.524178
B  2.762190 -0.443031
C  0.867519  0.078460

或者,您可以将函数列表作为aggfunc参数进行传递,然后重新编制索引:

代码语言:javascript
运行
复制
>>> df3 = pd.pivot_table(df, values=['D','E'], rows=['B'], aggfunc=[np.sum, np.mean])
>>> df3
        sum                mean          
          D         E         D         E
B                                        
A  1.810847 -4.193425  0.226356 -0.524178
B  2.762190 -3.544245  0.345274 -0.443031
C  0.867519  0.627677  0.108440  0.078460
>>> df3 = df3.ix[:, [('sum', 'D'), ('mean','E')]]
>>> df3.columns = ['D', 'E']
>>> df3
          D         E
B                    
A  1.810847 -0.524178
B  2.762190 -0.443031
C  0.867519  0.078460

如果能为每一列单独定义aggfunc,那就太好了。不知道怎么做,可能是传入了类似{'D':np.mean, 'E':np.sum}aggfunc字典参数。

更新透视实际上,在您的情况下,您可以通过手动旋转透视

代码语言:javascript
运行
复制
>>> df.groupby('B').aggregate({'D':np.sum, 'E':np.mean})
          E         D
B                    
A -0.524178  1.810847
B -0.443031  2.762190
C  0.078460  0.867519
票数 27
EN

Stack Overflow用户

发布于 2014-07-03 07:13:24

您可以通过传入dict将特定函数应用于特定列。

代码语言:javascript
运行
复制
pd.pivot_table(df, values=['D','E'], rows=['B'], aggfunc={'D':np.sum, 'E':np.mean})
票数 67
EN

Stack Overflow用户

发布于 2019-02-02 19:56:27

代码语言:javascript
运行
复制
table = pivot_table(df, values=['D', 'E'], index=['A', 'C'],
                aggfunc={'D': np.mean,'E': np.sum})

表D E平均总和A C条形大5.500000 7.500000小5.500000 8.500000 foo大2.000000 4.500000小2.333333 4.333333

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20119414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档