在python数据框架中计算类变量的平均值

2024-04-16 20:10:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个会话登录数据的数据帧。每个条目都与一个类(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等)的平均“持续时间”。我很难找到正确的命令来计算每个类的平均值,而不是整个列的平均值。你知道吗


Tags: 数据idtimesession条目accountstartstudent
1条回答
网友
1楼 · 发布于 2024-04-16 20:10:58

我不确定您所使用的数据格式/结构 意思是源数据在中,因为您呈现的不是一个精确的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等内部格式来计算持续时间。一旦计数器累积起来,字典就会计算出每种类型的平均值(你称之为 “class”,但这是一个技术性的Python构造,所以我称之为kind)。你知道吗

结果means存储计算出的值。means['m']给出所有'm'项的平均值,依此类推。你知道吗

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

from dateutil.parser import parse

这提供了一个更广泛的可接受格式的替代品。你知道吗

相关问题 更多 >