python - 使用 grouby 进行计数

标签 python pandas

我有一个具有以下结构的文件(大约有 10K 行):

User Destination Country
123  34578       US
123  34578       US
345  76590       US
123  87640       MX
890  11111       CA
890  88888       CA
890  99999       CA

每个用户可以前往位于不同国家/地区的多个目的地。我需要找出用户前往的独特目的地的数量、独特目的地的中位数和均值。国家也一样。我不知道如何使用 groupby 来实现这一点。我设法通过将所有内容放在嵌套字典中来获取统计信息,但我觉得使用 pandas 数据帧和 groubpy 可能有更简单的方法。

我不是在寻找每个 groupby 部分的计数。我正在寻找类似的东西:平均而言,用户访问 X 个目的地和 Y 个国家/地区。因此,我正在寻找所有 groupby 结果的汇总统计数据。

编辑。这是我的字典方法:

from collections import defaultdict
test=lambda: defaultdict(test)
conn_l=test()
with open('myfile') as f:
    for line in f:
        current=line.split(' ')
        s = current[0]
        d = current[1]
        if conn_l[s][d]:
            conn_l[s][d]+=1
        else:
            conn_l[s][d]=1

lengths=[]
for k,v in conn_l.items():
    lengths.append(len(v))

最佳答案

我认为这可能比乍一看要难一些(或者可能有比我下面做的更简单的方法)。

ser = df.groupby('User')['Destination'].value_counts()

123   34578    2
      87640    1
345   76590    1
890   11111    1
      99999    1
      88888    1

value_counts() 的输出是一个系列,然后您可以再次执行 groupby 以获得唯一目的地的计数。

ser2 = ser.groupby(level=0).count()

User
123    2
345    1
890    3

这是为了清楚起见,但您可以在一行中完成所有操作。

df.groupby('User')['Destination'].value_counts().groupby(level=0).count()

使用 ser2,您应该能够完成所有其他事情。

ser2.median()
ser2.mean()

关于python - 使用 grouby 进行计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31859206/

相关文章:

python - 正则表达式允许安全字符

python - angularjs+python(Flask)文件上传到服务器

python - 使用 pandas 将非数字列值替换为 float

python - Scipy -- 3d griddata -- 为什么有必要将 griddata xi 参数转换为元组?

python - 使用 Pandas 拆分列并用提取的值填充另一列

python - 多边形中的 geopandas 点

python - 将字符串值的字符连接到相同的列值

python - 对于每组对 REST API 函数的调用,仅发送一封电子邮件

python - 如何处理 2 个小部件事件来控制数据框?

python - Pandas qcut错误: Bin labels must be one fewer than the number of bin edges