2016-09-12 7 views
3

Ich habe ein Problem mit einem Listenverständnis innerhalb einer Schleife. Ich möchte Elemente aus einer Liste zu einer anderen hinzufügen.Elemente aus der Liste mit Listenverständnis zuordnen?

Ich verwende map class und zip innerhalb des Listenverständnisses.

from pandas import Series, DataFrame 
import pandas 
x = ['a', 'b', 'c', 'd', 'e'] 
y = [2, 3, 6, 7, 4] 
ser = {'A': Series(x), 'B': Series(y)} 
df = DataFrame(ser) 
targets = df['A'].tolist() 
df['A1999'] = [i + 1 for i in df['B']] 
df['A2000'] = [i + 2 for i in df['B']] 
df['A2001'] = [i + 3 for i in df['B']] 
df['A2002'] = [i + 1.7 for i in df['B']] 
df['A2003'] = [i + 1.1 for i in df['B']] 
y = range(1999, 2004) 
gaps = [] 
for t in targets: 
    temp = [] 
    years = [] 
    for ele in y: 
     target = 'A' + str(ele) 
     new = df[target][df['A'] == t].tolist() 
     temp.append(new) 
     years.append(ele) 
     gap = [list(map(list, zip(years, item))) for item in temp] 
    gaps.append(gap) 

Und die Ausgabe:

[[[[1999, 3]], [[1999, 4]], [[1999, 5]], [[1999, 3.7000000000000002]], 
    [[1999, 3.1000000000000001]]]... 

Was ich suche ist:

[[[[1999, 3]], [[2000, 4]], [[2001, 5]], [[2002, 3.7000000000000002]], 
    [[2003, 3.1000000000000001]]]... 

Wie kann ich die Liste Verständnis festsetzen, um alle Baujahre von years list und nicht hinzufügen nur die erste (dh 1999)

ich versuchte mit diesem Beispiel, aber ich glaube, ich bin das gleiche tun:

gap = [[[years[i], x] for i, x in enumerate(y)] for y in temp] 

oder

gap = [list(map(list, zip([[y] for y in years], item))) for item in temp] 
+0

In Ihrer zweiten Schleife 'in y 'Sie ordnen der Lücke viele Werte zu, aber fügen nur die letzte hinzu (da 'gaps.append (gap)') außerhalb der Schleife liegt. Soll das so sein? – RafaelC

+0

Zum Beispiel ist dieses Item '[[2000, 4]]' was du wirklich brauchst (im Gegensatz zu '[2000, 4]')? – CristiFati

+0

Ja. 'Gaps.append (Spalt)' draußen sein muss, alles andere Art und Weise 'gap' als Jahre' lenght' sein wird, was ich will, ist Ziele 'lenght' – estebanpdl

Antwort

2

ersetzen gap = mit diesem für ele

[list((x,y[0])) for x,y in zip(years,temp)] 
+0

Vielen Dank, @memebrain. Es funktioniert super! – estebanpdl

Verwandte Themen