Python 使用groupby计算唯一值
我有以下形式的数据:Python 使用groupby计算唯一值,python,pandas,group-by,Python,Pandas,Group By,我有以下形式的数据: df = pd.DataFrame({ 'group': [1, 1, 2, 3, 3, 3, 4], 'param': ['a', 'a', 'b', np.nan, 'a', 'a', np.nan] }) print(df) # group param # 0 1 a # 1 1 a # 2 2 b # 3 3 NaN # 4 3 a # 5 3
df = pd.DataFrame({
'group': [1, 1, 2, 3, 3, 3, 4],
'param': ['a', 'a', 'b', np.nan, 'a', 'a', np.nan]
})
print(df)
# group param
# 0 1 a
# 1 1 a
# 2 2 b
# 3 3 NaN
# 4 3 a
# 5 3 a
# 6 4 NaN
组中的非空值始终相同。我想对每个组(如果存在)的非空值计数一次,然后找到每个值的总计数
我目前正在以以下(笨重和低效)方式进行此操作:
我确信有一种方法可以更干净地完成这项工作,而不需要使用循环,但我似乎无法解决这个问题。非常感谢您的帮助。我想您可以使用:
使用另一个解决方案,然后通过创建新的df
by,重新塑造为Series
by,最后:
如果您不仅要计算唯一值,还要计算其他聚合函数,这只是解决方案的一个附加组件:
df.groupby(['group']).agg(['min','max','count','nunique'])
希望你觉得它有用我知道这篇文章发布已经有一段时间了,但我认为这也会有所帮助。 我想计算唯一值并按这些唯一值的数量过滤组,我就是这样做的:
df.groupby('group').agg(['min','max','count','nunique']).reset_index(drop=False)
上述答案也适用,但如果您想向现有数据框添加具有唯一_计数的列,可以使用 输出:
group param distinct_count
0 1 a 2.0
1 1 a 2.0
2 2 b 1.0
3 3 NaN NaN
4 3 a 2.0
5 3 a 2.0
6 4 NaN NaN
并检查@jezrael的团队计数是否较高
print (df.groupby('param')['group'].nunique())
我使用
df=pd.DataFrame({'group':[1,1,2,3,3,4],'param':['a','c','b',np.nan','c','a',np.nan]})测试它。
,但您的代码返回不同的输出,因为在每个组中只使用列表的第一个唯一元素。我的代码返回所有唯一的值。如果我知道你需要什么,请检查一下。谢谢你。我们是怎么得到这个专栏的names@dondapati-添加.reset\u index()
df.groupby('group').agg(['min','max','count','nunique']).reset_index(drop=False)
df['distinct_count'] = df.groupby(['param'])['group'].transform('nunique')
group param distinct_count
0 1 a 2.0
1 1 a 2.0
2 2 b 1.0
3 3 NaN NaN
4 3 a 2.0
5 3 a 2.0
6 4 NaN NaN
print (df.groupby('param')['group'].nunique())
param
a 2
b 1
Name: group, dtype: int64