我想计算一组在熊猫数据框中的唯一观察值,并创建一个具有唯一计数的新列。重要的是,我不想减少数据框中的行。有效地执行类似于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')
(这显然不起作用)
通过采用唯一的汇总数据框并将其连接到原始数据框,可以实现预期的结果,但是我想知道是否有更小的解决方案。
谢谢
答案 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}}