[英]Pandas: How to group by one column and show count for unique values for all other columns per group?
[英]Count of unique values per group as new column with pandas
我想计算熊猫数据框中一组的唯一观察值,并创建一个具有唯一计数的新列。 重要的是,我不想减少数据框中的行; 有效地执行类似于 SQL 中的窗口函数的操作。
df = pd.DataFrame({
'uID': ['James', 'Henry', 'Abe', 'James', 'Henry', 'Brian', 'Claude', 'James'],
'mID': ['A', 'B', 'A', 'B', 'A', 'A', 'A', 'C']
})
df.groupby('mID')['uID'].nunique()
将获得每组的唯一计数,但它总结(减少行),我实际上想按照以下方式做一些事情:
df['ncount'] = df.groupby('mID')['uID'].transform('nunique')
(这显然不起作用)
通过获取独特的汇总数据框并将其加入原始数据框,可以实现预期的结果,但我想知道是否有更简单的解决方案。
谢谢
GroupBy.transform('nunique')
在v0.23.4
,您的解决方案对我有用。
df['ncount'] = df.groupby('mID')['uID'].transform('nunique')
df
uID mID ncount
0 James A 5
1 Henry B 2
2 Abe A 5
3 James B 2
4 Henry A 5
5 Brian A 5
6 Claude A 5
7 James C 1
GroupBy.nunique
+ pd.Series.map
此外,使用您现有的解决方案,您可以将系列map
回mID
:
df['ncount'] = df.mID.map(df.groupby('mID')['uID'].nunique())
df
uID mID ncount
0 James A 5
1 Henry B 2
2 Abe A 5
3 James B 2
4 Henry A 5
5 Brian A 5
6 Claude A 5
7 James C 1
你很亲近!
df['ncount'] = df.groupby('mID')['uID'].transform(pd.Series.nunique)
uID mID ncount
0 James A 5
1 Henry B 2
2 Abe A 5
3 James B 2
4 Henry A 5
5 Brian A 5
6 Claude A 5
7 James C 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.