2016-07-13 26 views
0

So habe ich eine Liste von Daten in einer Spalte und eine Liste von Werten in einer anderen.Python-Liste von zwei Spalten aus Excel

2/8/13 474 
2/7/13 463.25 
2/6/13 456.47 
2/5/13 444.05 
2/4/13 453.91 
2/1/13 459.11 
1/31/13 456.98 
1/30/13 457 
1/29/13 458.5 
1/28/13 437.83 
1/25/13 451.69 
1/24/13 460 
1/23/13 508.81 
1/22/13 504.56 
1/18/13 498.52 
1/17/13 510.31 

Ich muss einen Weg finden, um die Daten in der ersten Spalte zu kompilieren und den Durchschnittswert für diesen Monat ausgeben.

Die Ausgabe sollte wie folgt aussehen: Monat: Jahr average_value_for_month.

Zum Beispiel können die ersten beiden Ausgänge sollte wie folgt aussehen

02:2013 458.46 

01:2013 500.08 

^dies sagt, dass für die Monate Februar, Januar 2013, die Mittelwerte meinen Code 458.46,500.08

Gerade jetzt waren ist,

def averageData(list_of_tuples): 
    #print(list_of_tuples) #prints out the list obtained from getDataList 
    sep_list = [] 
    for i in range(0,len(list_of_tuples)): 
     split_list = list_of_tuples[i].split() 
     sep_list.append(split_list) 
     #print(sep_list[i]) #prints out list with index [i][0] being the date and index [i][1] being the column value 
    new_list = [] 
    for i in range(0,len(sep_list)): 
     sep_list[i][0] = sep_list[i][0].split('-') #splits dates in year, month, day 
     #print(sep_list[i][0]) 
     print(sep_list[i][0]) 
    for i in range(0,len(sep_list)): 
     if sep_list[i][0][0] == sep_list[i+1][0][0] and sep_list[i][0][1] == sep_list[i+1][0][1]: 
      new_date = sep_list[i][0][1]+':'+sep_list[i][0][0] 
     new_list.append(new_date) 
     #print(new_list[i]) 

Die ursprüngliche Liste ist wie

formatiert
['2013-02-08 474.00'] 

Meine erste for-Schleife macht die Liste

werden
['2013-02-08', '474.00'] 

dann die zweite for-Schleife dreht die Liste in

[['2013', '02', '08'], '474.00'] 

Ich bin fest, wo man von hier geht. Bitte helfen Sie.

+0

versuchen Sie mit Pivot-Tabelle! http://stackoverflow.com/questions/15570099/pandas-pivot-tables-row-subtotals –

Antwort

0

Sie können Listenmethoden wie .split und die Trennzeichen [:] kombinieren, um weniger Schleifen und Listen zu erhalten und einen besseren Überblick zu behalten. Ein Beispiel für ein bestimmtes Tupel namens „Tupel“: ​​

datelist=tuple.split(" ")[0].split("/") 
    month=datelist[0] 
    year=datelist[2] 
    value=tuple.split(" ")[1] 

Wenn Sie Ihre Variablen halten wie diese organisiert, ich glaube, Sie selbst den Rest herausfinden können, =)

0

Hier ist meine Lösung. Hoffe, das hilft:

from datetime import datetime 

def averageData(list_of_tuples): 
    dic = {}  
    for i in list_of_tuples: 
     i = list(map(str,i.strip().split(' '))) 
     dt = datetime.strptime(i[0] , '%Y-%m-%d') 
     if (dt.month,dt.year) in dic: 
      dic[(dt.month,dt.year)].append(float(i[1])) 
     else: 
      dic[(dt.month,dt.year)] = [float(i[1])] 

    for i in dic.items(): 
     #print(i) 
     print (str(i[0][0])+':'+str(i[0][1])+' '+str(round(sum(i[1])/len(i[1]),2))) 

tuples = ['2013-02-08 474','2013-02-07 463.25','2013-02-06 456.47', 
'2013-02-05 444.05', 
'2013-02-04 453.91', 
'2013-02-01 459.11', 
'2013-01-31 456.98', 
'2013-01-30 457', 
'2013-01-29 458.5', 
'2013-01-28 437.83', 
'2013-01-25 451.69', 
'2013-01-24 460', 
'2013-01-23 508.81', 
'2013-01-22 504.56', 
'2013-01-18 498.52', 
'2013-01-17 510.31'] 

averageData(tuples)