相关疑难解决方法(0)

Pandas groupby.size与series.value_counts vs collections.Counter有多个系列

有很多问题(1,2,3)处理的计数值单一系列.

但是,关于计算两个或更多系列组合的最佳方法的问题较少.解决方案呈现(1,2),但是,当和为什么要使用的每个没有讨论.

以下是三种潜在方法的基准测试.我有两个具体问题:

  1. 为什么grouper效率更高count?我预计count它会更高效,因为它在C中实现.grouper即使列数从2增加到4 ,优越的性能仍然存在.
  2. 为什么这么多value_counter表现不佳grouper?这是由于从列表构建列表或系列的成本吗?

我理解输出是不同的,这也应该告知选择.例如,使用连续numpy数组与字典理解相比,按计数过滤更有效:

x, z = grouper(df), count(df)
%timeit x[x.values > 10]                        # 749µs
%timeit {k: v for k, v in z.items() if v > 10}  # 9.37ms
Run Code Online (Sandbox Code Playgroud)

然而,我的问题的重点是在一系列与字典中建立可比较结果的表现.我的C知识是有限的,但我会感谢任何可以指出这些方法的基础逻辑的答案.

基准代码

import pandas as pd
import numpy as np
from collections import Counter

np.random.seed(0)

m, n = …
Run Code Online (Sandbox Code Playgroud)

python counter dictionary dataframe pandas

30
推荐指数
1
解决办法
2975
查看次数

按两列分组并计算pandas中每个组合的出现次数

我有以下数据框:

data = pd.DataFrame({'user_id' : ['a1', 'a1', 'a1', 'a2','a2','a2','a3','a3','a3'], 'product_id' : ['p1','p1','p2','p1','p1','p1','p2','p2','p3']})

product_id  user_id
    p1       a1
    p1       a1
    p2       a1
    p1       a2
    p1       a2
    p1       a2
    p2       a3
    p2       a3
    p3       a3
Run Code Online (Sandbox Code Playgroud)

在实际情况中,可能还有一些其他列,但我需要做的是按data_id和user_id列分组数据并计算每个组合的数量,并将其作为新数据框中的新列添加

输出应该是这样的:

user_id product_id  count
a1       p1            2
a1       p2            1
a2       p1            3
a3       p2            2
a3       p3            1
Run Code Online (Sandbox Code Playgroud)

我试过以下代码:

grouped=data.groupby(['user_id','product_id']).count()
Run Code Online (Sandbox Code Playgroud)

但结果是:

user_id product_id
 a1       p1
          p2
 a2       p1
 a3       p2
          p3
Run Code Online (Sandbox Code Playgroud)

实际上对我来说最重要的是拥有一个具有出现次数的列名计数,我需要稍后使用该列.

python data-analysis dataframe pandas

8
推荐指数
2
解决办法
7948
查看次数

标签 统计

dataframe ×2

pandas ×2

python ×2

counter ×1

data-analysis ×1

dictionary ×1