Python Pandas:aggfunc=count unique distin的透视表

2024-05-16 06:45:34 发布

您现在位置:Python中文网/ 问答频道 /正文

df2 = pd.DataFrame({'X' : ['X1', 'X1', 'X1', 'X1'], 'Y' : ['Y2','Y1','Y1','Y1'], 'Z' : ['Z3','Z1','Z1','Z2']})

    X   Y   Z
0  X1  Y2  Z3
1  X1  Y1  Z1
2  X1  Y1  Z1
3  X1  Y1  Z2

g=df2.groupby('X')

pd.pivot_table(g, values='X', rows='Y', cols='Z', margins=False, aggfunc='count')

Traceback (most recent call last): ... AttributeError: 'Index' object has no attribute 'index'

如何获取一个透视表,其中一个DataFrame列的唯一值计数小于或等于另外两个列的唯一值计数?
count unique是否存在aggfunc?我应该使用np.bincount()吗?

注意。我知道“Series”values_counts()但是我需要一个透视表。


编辑:输出应为:

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

Tags: dataframecountnanpd计数valuesdf2x1
3条回答

因为pandas的版本至少是0.16,所以它不接受参数“rows”

截至0.23,解决方案是:

df2.pivot_table(values='X', index='Y', columns='Z', aggfunc=pd.Series.nunique)

返回:

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

你是说这样的事吗?

In [39]: df2.pivot_table(values='X', rows='Y', cols='Z', 
                         aggfunc=lambda x: len(x.unique()))
Out[39]: 
Z   Z1  Z2  Z3
Y             
Y1   1   1 NaN
Y2 NaN NaN   1

注意,使用len假设数据帧中没有NAs。否则,您可以执行x.value_counts().count()len(x.dropna().unique())

我想这会更完美:

df2.pivot_table(values='X',rows=['Y','Z'],cols='X',aggfunc='count')


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

相关问题 更多 >