将每个组的唯一值计数为包含pandas的新列

2024-06-16 12:40:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在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()

将得到每个组的唯一计数,但它总结(减少行数),我想有效地沿着以下路线做一些事情:

^{pr2}$

(这显然行不通)

通过获取唯一的汇总数据帧并将其连接到原始数据帧,可以实现预期的结果,但我想知道是否有一个更简单的解决方案。在

谢谢


Tags: 数据函数dataframepandasdfsqluidpd
2条回答

你很亲密!在

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

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

^{pr2}$

相关问题 更多 >