2017-09-06 2 views
0

Ich versuche, eine neue Spalte in einem Datenrahmen zu generieren, der gleich dem aktuellen Zeilenindex abzüglich des Index der Zeile ist, die ursprünglich von einem Benutzer ausgewählt wurde. Sagen wir, wir haben diese Datenrahmen:Pandas Datenrahmen anwenden Funktion zum Erstellen neuer Spalte basierend auf ausgewählten Zeile

 A B C 
0 foo bar 
1 bar foo 
2 foo bar 

und unsere Benutzer hat ausgewählte Zeile 1. ich die Werte der Spalte C wollen, dies zu sein:

A B C 
0 foo bar -1 
1 bar foo 0 
2 foo bar 1 

Ich weiß schon, kann dies eine Art implementiert werden durch Iterieren durch den Datenrahmen so etwas wie dies mit:

for index,row in df.iterrows(): 
    df['C'].loc[index] = index - USER_SELECTED_INDEX 

dies ist jedoch sehr langsam. So langsam in der Tat, dass es nicht funktioniert.

Meine Frage ist, wie kann ich df.apply verwenden, um die Dinge zu beschleunigen? Und wie kann ich den Index der aktuellen Zeile an meine Funktion übergeben? Ich möchte etwas tun wie:

def applyCol(index): 
    df['C'].loc[index] = index - USER_SELECTED_INDEX 

df['C'] = df.apply(applyCol, axis=1) 

Antwort

0

Die Antwort gefunden, die ich gesucht habe. Für Interessierte:

def applyCol(row): 
    return row.name - USER_SELECTED_INDEX #row.name resolves to the index 

df['C'] = df.apply(applyCol, axis=1) 

Glückliche Codierung!

2

Vielleicht versuchen Sie das.

df.assign(C=df.index-1) 
Out[28]: 
    A B C 
0 foo bar -1 
1 bar foo 0 
2 foo bar 1 
Verwandte Themen