首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python Pandas :带有aggfunc = count唯一distinct的数据透视表

Python Pandas :带有aggfunc = count唯一distinct的数据透视表
EN

Stack Overflow用户
提问于 2012-10-12 21:43:48
回答 9查看 236.5K关注 0票数 72

这段代码:

代码语言:javascript
复制
df2 = (
    pd.DataFrame({
        'X' : ['X1', 'X1', 'X1', 'X1'], 
        'Y' : ['Y2', 'Y1', 'Y1', 'Y1'], 
        'Z' : ['Z3', 'Z1', 'Z1', 'Z2']
    })
)
g = df2.groupby('X')
pd.pivot_table(g, values='X', rows='Y', cols='Z', margins=False, aggfunc='count')

返回以下错误:

代码语言:javascript
复制
Traceback (most recent call last): ... 
AttributeError: 'Index' object has no attribute 'index'

如何获得一个透视表,其中一个DataFrame列的唯一值的计数为另外两个列?

是否有用于唯一计数的aggfunc?我应该使用np.bincount()

注意:我知道pandas.Series.values_counts(),但是我需要一个数据透视表。

编辑:输出应为:

代码语言:javascript
复制
Z   Z1  Z2  Z3
Y             
Y1   1   1 NaN
Y2 NaN NaN   1
EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2012-10-12 23:19:00

你是说像这样的东西吗?

代码语言:javascript
复制
>>> df2.pivot_table(values='X', index='Y', columns='Z', aggfunc=lambda x: len(x.unique()))

Z   Z1  Z2  Z3
Y             
Y1   1   1 NaN
Y2 NaN NaN   1

请注意,使用len假设您的DataFrame中没有NA。否则,您可以使用x.value_counts().count()len(x.dropna().unique())

票数 115
EN

Stack Overflow用户

发布于 2013-10-28 16:48:01

这是对.pivot_table中的条目进行计数的好方法

代码语言:javascript
复制
>>> df2.pivot_table(values='X', index=['Y','Z'], columns='X', aggfunc='count')

        X1  X2
Y   Z       
Y1  Z1   1   1
    Z2   1  NaN
Y2  Z3   1  NaN
票数 52
EN

Stack Overflow用户

发布于 2018-07-17 01:45:37

由于pandas的最低版本为0.16,因此它不接受参数“row”

从0.23开始,解决方案是:

代码语言:javascript
复制
df2.pivot_table(values='X', index='Y', columns='Z', aggfunc=pd.Series.nunique)

它返回:

代码语言:javascript
复制
Z    Z1   Z2   Z3
Y                
Y1  1.0  1.0  NaN
Y2  NaN  NaN  1.0
票数 35
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12860421

复制
相关文章

相似问题

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