繁体   English   中英

计算熊猫中的唯一价值对

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM