Python:在不同的日期汇总不同用户的数据

时间:2014-05-21 22:54:03

标签: python aggregates

我是一名新的Python用户,并学习如何操纵/汇总数据。

我有一些格式的示例数据:

User Date      Price
A    20130101   50
A    20130102    20
A    20130103    30
B    20130201    40
B    20130202    20

等等。

我正在寻找围绕每个用户的一些聚合,并希望得到平均支出的输出,如:

User  Mean_Spend
A      33
B      30

我可以逐行阅读并获取一个用户的聚合但我正在努力为不同的用户读取数据。

有关如何为不同用户阅读文件的任何建议都非常受欢迎。

由于

2 个答案:

答案 0 :(得分:0)

这些集合的Counter对象(documentation)基于Dictionary,这意味着这种快速求和。天真地,您可以使用一个来累积支出金额,另一个来计算交易数量,然后除以。

from collections import Counter
accumulator =  Counter()
transactions = Counter()

# assuming your input is exactly as shown...
with open('my_foo.txt', 'r') as f:
    f.readline() # skip header line
    for line in f.readlines():
        parts = line.split()
        transactions[parts[0]] += 1
        accumulator[parts[0]]+=int(parts[2])

result = dict((k, float(accumulator[k])/transactions[k]) for k in transactions)

答案 1 :(得分:0)

pandas包执行此操作(以及更多内容)。使用一个小数据集dft作为示例:

dft = pandas.DataFrame([[1,2,'a'],[1,2,'b'],[3,1,'b'],[4,1,'a']])
dfg = dft.groupby(dft[2]) # Group by the third column
dfg.mean()

输出:

  0   1
a 2.5 1.5
b 2.0 1.5

分别是第0列和第1列的平均值。

我不知道您的数据是什么格式;您可以通过读取文本文件或转换python数组等来制作pandas数据框。

您可以按多个列进行分组,或者查看每个用户的花费时间趋势,或者...此处和docs中有大量的大熊猫食谱示例。