Python Pandas:对所有列进行分组并计算不同的价值吗? [英] Python Pandas: Group by and count distinct value over all columns?

查看:201
本文介绍了Python Pandas:对所有列进行分组并计算不同的价值吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有df

      column1  column2  column3  column4
0    name        True        True         NaN
1    name        NaN        True         NaN
2   name1        NaN        True         True 
3   name1        True        True       True 

我想分组并在所有列上计算不同的值我正在尝试:

and I would like to Group by and count distinct value over all columnsI am trying :

df.groupby('column1').nunique()

,但我收到此错误。


AttributeError:'DataFrameGroupBy'对象没有属性'nunique'

AttributeError: 'DataFrameGroupBy' object has no attribute 'nunique'

有人建议吗?

推荐答案

您可以使用 stack 系列,然后 Series.groupby SeriesGroupBy.nunique

You can use stack for Series and then Series.groupby with SeriesGroupBy.nunique:

df1 = df.set_index('column1').stack()

print (df1.groupby(level=[0,1]).nunique(dropna=False).unstack())

示例:

print (df)
  column1 column2 column3 column4
0    name    True    True     NaN
1    name     NaN    True     NaN
2   name1     NaN    True    True
3   name1    True    True    True

df1 = df.set_index('column1').stack(dropna=False)
print (df1)
column1         
name     column2    True
         column3    True
         column4     NaN
         column2     NaN
         column3    True
         column4     NaN
name1    column2     NaN
         column3    True
         column4    True
         column2    True
         column3    True
         column4    True
dtype: object

print (df1.groupby(level=[0,1]).nunique(dropna=False).unstack(fill_value=0))
         column2  column3  column4
column1                           
name           2        1        1
name1          2        1        1

print (df1.groupby(level=[0,1]).nunique().unstack(fill_value=0))
         column2  column3  column4
column1                           
name           1        1        0
name1          1        1        1






另一种应用了两次的解决方案

print (df.groupby('column1')
         .apply(lambda x: x.iloc[:,1:].apply(lambda y: y.nunique(dropna=False))))
         column2  column3  column4
column1                           
name           2        1        1
name1          2        1        1

print (df.groupby('column1').apply(lambda x: x.iloc[:,1:].apply(lambda y: y.nunique())))
         column2  column3  column4
column1                           
name           1        1        0
name1          1        1        1

这篇关于Python Pandas:对所有列进行分组并计算不同的价值吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆