计算python数据帧中类变量的均值

时间:2014-10-27 02:55:03

标签: python class mean

我有一个会话登录数据的数据框。每个条目与一个类(e,c,g,m)相关联。所以行看起来像这样:

1: [session_start_time  session_end_time    class_id    problems_completed  student_id  student_account_created student_previous_logins_total   student_previous_class_logins   duration]

2: [1/6/12 16:28    1/6/12 16:55    e   37  91  10/26/11 0:00   76  27  1/1/04 0:27]

3: [1/11/12 13:18   1/11/12 13:58   m   33  172 1/10/12 0:00    5   3   1/1/04 0:40]

我正在尝试计算平均值"持续时间"每个班级(e,c,g等)。我无法找到正确的命令来计算每个类的平均值,而不是整列的平均值。

1 个答案:

答案 0 :(得分:0)

我不确定您的确切数据格式/结构 表示您的源数据是在,因为您提供的不是精确的Python表示。但是,让我们假设你的行是 字符串列表(或 很容易被转换成它们):

rows = [
    [ '1/6/12 16:28', '1/6/12 16:55', 'e' ],
    [ '1/11/12 13:18', '1/11/12 13:58', 'm' ],
    [ '1/13/12 13:20', '1/13/12 13:24', 'm' ]
]

然后,这是按类计算均值的一种方法:

from collections import Counter
from datetime import datetime

def parse(s, format="%x %H:%M"):
    """
    Return parsed datetime in the given format.
    """
    return datetime.strptime(s, format)

total_items = Counter()
total_duration = Counter()

for start, end, kind in rows:
    duration = parse(end) - parse(start)
    total_items[kind] += 1
    total_duration[kind] += duration.total_seconds()

means = { k: total_duration[k] / total_items[k] for k in total_items }
print means

这使用collections.Counter来跟踪日志中每个类的计数和持续时间。必须首先计算持续时间,方法是将日期/时间字符串表示解析为内部格式,如datetime.datetime。一旦计数器被累积,字典理解就会计算出每种类型的平均值(你所说的) "类"但这是一个技术性的Python构造,所以我称它为一种类型。

结果means存储计算值。 means['m']给出了所有'm'条目的均值,等等。

虽然parse函数适用于您在问题中显示的少数数据样本,但日期/时间解析非常挑剔。我建议不要在这里使用strptime方法,而是使用更广泛和包容的解析器,例如dateutil模块中的解析器。如果您想使用它,请删除或重命名此处的parse函数,并替换:

from dateutil.parser import parse

这提供了更广泛的可接受格式的替代品。