![](/img/trans.png)
[英]Pandas dataframe find distinct value count for each group in other columns
[英]Python Pandas: Group by and count distinct value over all columns?
我有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
我想分組並在所有列中計算不同的價值我正在嘗試:
df.groupby('column1').nunique()
但我收到此錯誤。
AttributeError:“ DataFrameGroupBy”對象沒有屬性“ nunique”
有人有建議嗎?
您可以為Series
使用stack
,然后對Series.groupby
使用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
雙另一種解決方案apply
:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.