我有一个具有以下结构的文件(大约有 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/