[英]counting unique value pairs in pandas
我有一个如下数据框:
place user count item
2013-06-01 New York john 2 book
2013-06-01 New York john 1 potato
2013-06-04 San Francisco john 5 laptop
2013-06-04 San Francisco jane 6 tape player
2013-05-02 Houston michael 2 computer
我正在尝试计算每个place
的唯一(date, user)
组合的数量,或者换句话说,是对每个城市的“唯一访问”的数量。 因此,对于New York
来说,是一个,对于San Francisco
来说,是两个,对于Houston
,它将是一个。
我试过以下操作:
df.groupby([df.index, user, place]).place.size()
但只是返回总count
每个地方。 我觉得我在这里确实缺少一些明显的东西,但是我看不到它是什么。 有什么帮助吗?
这是一种实现方法,假设您将索引转换为名为date的列,但也可以像上面所示将其传递进来。
输入:
df.groupby(['place', 'user', 'date']).place.count().groupby(level='place').count()
输出:
place
Houston 1
New York 1
San Francisco 2
dtype: int64
替代答案:
df.drop_duplicates(['date', 'place', 'user'])['place'].value_counts()
它比Phillip的回答更有效率(因为通常groupby不是):
In [64]: %timeit df.groupby(['place', 'user', 'date']).place.count().groupby(level='place').count()
100 loops, best of 3: 2.55 ms per loop
In [65]: %timeit df.drop_duplicates(['date', 'place', 'user'])['place'].value_counts()
1000 loops, best of 3: 1.27 ms per loop
(根据以上DataFame计算得出的数据被串联10000次)。
(“ drop_duplicates”在要枚举不同组合时也很有用-为每个组合分配一个ID-而不是仅对它们进行计数,尽管在OP的问题中并非如此)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.