2017-10-03 3 views
1

Ich bin neu bei Python 3 und Pandas. Ich habe versucht, eine neue Spalte zu einem Datenrahmen hinzuzufügen, wobei der Wert die Differenz zwischen zwei vorhandenen Spalten ist. My aktuelle Code ist:apply() Funktion um einen neuen Wert in einer neuen Spalte zu erzeugen

import pandas as pd 
import io 
from io import StringIO 
x="""a,b,c 
1,2,3 
4,5,6 
7,8,9""" 

with StringIO(x) as df: 
    new=pd.read_csv(df) 

print (new) 

y=new.copy() 

y.loc[:,"d"]=0 

# My lambda function is completely wrong, but I don't know how to make it right. 

y["d"]=y["d"].apply(lambda x:y["a"]-y["b"], axis=1) 

gewünschte Ausgabe ist

abcd

1 2 3 -1

4 5 6 -1

7 8 9 -1

Hat jemand eine Idee, wie ich meinen Code arbeiten lassen kann?

Danke für Ihre Hilfe.

Antwort

1

Sie benötigen y nur für DataFrame für DataFrame.apply mit axis=1 für Prozess durch Reihen:

y["d"]= y.apply(lambda x:x["a"]-x["b"], axis=1) 

Für eine bessere Fehlersuche ist möglich, benutzerdefinierte Funktion erstellen:

def f(x): 
    print (x) 
    a = x["a"]-x["b"] 
    return a 

y["d"]= y.apply(f, axis=1) 

a 1 
b 2 
c 3 
Name: 0, dtype: int64 
a 4 
b 5 
c 6 
Name: 1, dtype: int64 
a 7 
b 8 
c 9 
Name: 2, dtype: int64 

bessere Lösung, wenn Bedarf nur Spalten subtrahieren:

y["d"] = y["a"] - y["b"] 

print (y) 
    a b c d 
0 1 2 3 -1 
1 4 5 6 -1 
2 7 8 9 -1 
+0

Vielen Dank für Ihre Antwort. Es funktioniert wirklich. Darf ich fragen, was x in diesem Fall darstellt? Bedeutet es jede Reihe von y? – derec

+0

Genau, es ist jede Zeile, weil 'Achse = 1'. Wenn 'Achse = 0', ist es jede Spalte. – jezrael

Verwandte Themen