【发布时间】:2017-09-29 07:30:26
【问题描述】:
我想向我的 pandas 数据框添加一个聚合的、分组的、唯一的列,但不聚合整个数据框。我试图在一行中做到这一点,并避免创建一个新的聚合对象并合并它,等等。
我的 df 有 track、type 和 id。我希望每个轨道/类型组合的唯一 ID 数量作为表中的新列(但不折叠结果 df 中的轨道/类型组合)。相同的行数,多 1 列。
这样的东西不起作用:
df['n_unique_id'] = df.groupby(['track', 'type'])['id'].nunique()
也不是
df['n_unique_id'] = df.groupby(['track', 'type'])['id'].transform(nunique)
最后一个适用于一些聚合函数,但不适用于其他函数。以下作品(但在我的数据集上毫无意义):
df['n_unique_id'] = df.groupby(['track', 'type'])['id'].transform(sum)
在 R 中,这很容易在 data.table 中使用
df[, n_unique_id := uniqueN(id), by = c('track', 'type')]
谢谢!
【问题讨论】:
-
可以粘贴您的源数据帧的副本以及预期的输出应该是什么样子?
标签: python pandas dataframe aggregate pandas-groupby