2017-06-23 1 views
0

Angenommen, ich habe Datenrahmen.Erstellen der Spalte basierend auf Werten aus anderen Spalten in Pandas + Iteration

Zusätzlich habe ich 2 Listen:

se_bench = [] 
tu_bench= [] 

Ich möchte die Funktion wie erstellen:

def calculation(row): 
    if row['var_1'] == #something: 
     return (se_bench[1]/tu_bench[1])* turnover.iloc[i,] 

    elif row['var_1'] == #something else: 
     return (se_bench[2]/tu_bench[2])* turnover.iloc[i,] 

df.apply(lambda row: calculation(row),axis = 1) 

wo 'var_1' und 'Umsatz' Variablen in Datenrahmen. Wie kann ich turnover.iloc[i,] durch jede Zeile iterieren?

Ich denke, es ist möglich, es durch for-Schleife zu tun, aber ist es möglich, es mit der Funktion anwenden zu tun?

EDIT:

mit for-Schleife funktioniert es so etwas wie es:

#Or alternative: 
se = [] 
for i in range(len(df.index)): 
    if df['var_1'] == #something: 
     seva.append((se_bench[1]/tu_bench[1])* turnover.iloc[i,]) 

    elif row['var_1'] == #something else: 
     seva.append((se_bench[1]/tu_bench[1])* turnover.iloc[i,]) 

    else: 
     seva.append(np.nan) 


df['seva'] = pd.Series(seva,index = df.index) 
+0

In dem obigen Code sollte 'turnover.iloc [i,]' 'df.turnover.iloc [i,]' sein, wenn 'Umsatz' eine Variable/Spalte in 'df' ist. Ich hoffe auch, dass Sie wissen, dass 'df ['var_1'] ==' Serien vergleicht und wenn Sie Werte vergleichen wollen, dann sollte es im Schleifencode wieder 'iloc' verwenden –

Antwort

0

Sie df.applymap() Funktion verwenden können, die eine Funktion, um ganze Datenrahmen gilt und ist viel effizienter als eine Schleife zu schreiben iterieren die Reihen.

df.applymap(lambda x: calculation(x))

sollte in Ihrem Fall arbeiten.

0
def calculation(row): 
    if row['var_1'] == #something: 
     return (se_bench[1]/tu_bench[1])* row['turnover'] 

    elif row['var_1'] == #something else: 
     return (se_bench[2]/tu_bench[2])* row['turnover'] 

    else: 
     return (np.nan)  

df['seva'] = df.apply(calculation, axis = 1) 
Verwandte Themen