2014-10-27 134 views
0

意味着類變量我有會話的登錄數據的數據幀。每個條目都與一個類(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等)的平均「持續時間」。我無法找到正確的命令來計算每班的平均值,而不是整列的平均值。

回答

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 s來跟蹤日誌中每個類的計數和持續時間。持續時間必須先計算出來,首先將日期/時間字符串表示解析爲內部格式,如datetime.datetime。一旦計數器積累,字典解析計算每樣平均值(你叫什麼 「下課」,但這是一個技術性的Python結構,所以我把它稱爲一種)。

所得means存儲所計算的值。 means['m']給出了平均所有'm'條目,等等。

儘管parse函數可用於您在問題中顯示的少數數據樣本,但日期/時間解析相當挑剔。相反,這裏使用strptime方法,我建議使用一個更廣泛和包容性的解析器,如該dateutil模塊中找到。如果你想使用,刪除或重命名這裏找到parse功能,並替代:

from dateutil.parser import parse 

,提供了一個簡易替換了更廣泛的接受的格式。