每组的唯一值计数作为带有熊猫的新列

时间:2018-11-12 23:35:15

标签: python pandas dataframe group-by pandas-groupby

我想计算一组在熊猫数据框中的唯一观察值,并创建一个具有唯一计数的新列。重要的是,我不想减少数据框中的行。有效地执行类似于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')

(这显然不起作用)

通过采用唯一的汇总数据框并将其连接到原始数据框,可以实现预期的结果,但是我想知道是否有更小的解决方案。

谢谢

2 个答案:

答案 0 :(得分:1)

您非常亲密!

for (i in numcols) {
    h2[[i]] <- as.numeric(as.character(h2[[i]]))
}

答案 1 :(得分:1)

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

{{1}}