2014-03-19 41 views
1

我需要查找與每個鍵(AA,BB)相關的所有整數的中位數。基本格式我的代碼導致:需要創建一個從字典中提取的中位數函數

AA - 21 
AA - 52 
BB - 3 
BB - 2 

我的代碼:

def scoreData(filename): 
    d = dict() 
    fin = open(filename) 
    contents = fin.readlines() 
    for line in contents: 
     parts = linesplit() 
     part[i] = int(part[1]) 
     if parts[0] not in d: 
      d[parts[0]] = list(parts[1]) 
     else: 
      d[parts[0]].append(parts[1]) 
    names = list(d.keys()) 
    names.sort() #alphabeticez the names 
    print("Name\+Max\+Min\+Median") 
    for name in names: #makes the table 
     print (name"\+", max(d[name]),\+min(d[name]),"\+"median(d[name])) 

恐怕遵循相同的格式爲「姓名」和「names.sort」將徹底重組數據。我曾經想過「從統計數據導入中位數」,但我再一次不知道如何選擇與每個相同鍵相關的值。

在此先感謝

+0

請解決您的壓痕。 –

回答

1

您可以pandasnumpy輕鬆地做到這一點:

import pandas 
import numpy as np 

,並通過第一行彙總:

score = pandas.read_csv(filename, delimiter=' - ', header=None) 
print score.groupby(0).agg([np.median, np.min, np.max]) 

返回:

  1 
    median amin amax 
0 
AA 36.5 21 52 
BB  2.5  2  3 
+0

熊貓很有趣,upvote爲您提供非天真的解決方案 – aruisdante

+1

謝謝@cynddl。我從來沒有聽說過熊貓,但它對於Python數據分析來說看起來很神奇!祝你有個美好的一天:) – AJ19

+0

@aruisdante在這種情況下,它更像是一臺推土機,但熊貓仍爲數據分析提供了非常簡單的解決方案! – cynddl

0

還有很多,很多你可以去這個方法。但這是一個'天真'的實現,可以完成工作。

假設你的數據是這樣的:

AA 1 
BB 5 
AA 2 
CC 7 
BB 1 

你可以做到以下幾點:

import numpy as np 
from collections import defaultdict 

def find_averages(input_file) 
    result_dict = defaultdict(list) 
    for line in input_file.readlines() 
     key, value = line.split() 
     result_dict[key].append[int(value)] 

    return [(key, np.mean(value)) for key,value in result_dict.iteritems()] 
+0

我想你的意思是'從集合導入DefaultDict'不只是'defaultdict'。這將產生一個'ImportError'。 –

+0

whopse,yep我確定沒有 – aruisdante

+0

另一個'ImportError'。它是'collections',而不是'Collections'。你也把'DefaultDict'看作是一個子模塊,而不是它實際上是的類。您需要像我在第一條評論中所說的那樣執行「輸入」。 –

相關問題