Pandas GroupBy并将唯一值计数添加为新列

时间:2019-02-06 21:13:28

标签: python pandas group-by pandas-groupby

问题

我正在尝试按列daysource对Pandas DataFrame进行分组,然后为每个组计算第三个(timestamp)的唯一实例(以找出有多少个)击中每天获得的每个来源),但出现此错误(下面有完整的回溯): TypeError: 'method' object is not subscriptable

尝试

我的代码是:

df['timestamp_count'] = df.groupby(["source", "day"]).agg({"timestamp": "nunique"})

理想情况下,我希望得到这样的结果(包括新列timestamp_count

day    source    timestamp                timestamp_count
1      facebook  2018-08-04 11:16:32.416  2
1      facebook  2019-01-03 10:25:38.216  2
1      twitter   2018-10-14 13:26:22.123  1
2      facebook  2019-01-30 12:16:32.416  1

运行df.describe()时,我看到source是一个对象,而day是一个整数。这可能是问题的一部分吗?在查看了其他问题之后,似乎很可能是沿着这些思路,但是似乎没有一个抛出相同的输入/错误组合。

有人可以帮助Python新手吗?非常感谢!

追踪

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-90-db5a002137ca> in <module>
----> 1 df['timestamp_count'] = (df.groupby["source", 
"day"]).agg({"timestamp": "nunique"})

TypeError: 'method' object is not subscriptable

1 个答案:

答案 0 :(得分:1)

使用transform广播结果:

df['timestamp_count'] = (
    df.groupby(["source", "day"])['timestamp'].transform('nunique'))
df

   day    source                timestamp  timestamp_count
0    1  facebook  2018-08-04 11:16:32.416                2
1    1  facebook  2019-01-03 10:25:38.216                2
2    1   twitter  2018-10-14 13:26:22.123                1
3    2  facebook  2019-01-30 12:16:32.416                1