web-dev-qa-db-de.com

Neue Spalte in Pandas DataFrame Python hinzufügen

Ich habe zum Beispiel einen Datenrahmen in Pandas:

Col1 Col2
A     1 
B     2
C     3

Wenn ich jetzt noch eine weitere Spalte hinzufügen möchte, heißt Col3 und der Wert basiert auf Col2. Wenn in der Formel Col2> 1 ist, dann ist Col3 0, ansonsten wäre es 1. Also im obigen Beispiel. Die Ausgabe wäre:

Col1 Col2 Col3
A    1    1
B    2    0
C    3    0

Hast du eine Idee, wie du das erreichen kannst?

44
Santiago Munez

Sie machen nur einen gegenteiligen Vergleich. if Col2 <= 1. Dies gibt eine boolesche Serie mit False-Werten für diejenigen, die größer als 1 sind, und True-Werte für den anderen Wert zurück. Wenn Sie es in einen int64-Datentyp konvertieren, wird True zu 1 und False zu 0.

df['Col3'] = (df['Col2'] <= 1).astype(int)

Wenn Sie eine allgemeinere Lösung suchen, in der Sie Col3 eine beliebige Nummer zuweisen können, abhängig von dem Wert von Col2, sollten Sie Folgendes tun:

df['Col3'] = df['Col2'].map(lambda x: 42 if x > 1 else 55)

Oder:

df['Col3'] = 0
condition = df['Col2'] > 1
df.loc[condition, 'Col3'] = 42
df.loc[~condition, 'Col3'] = 55
61
Viktor Kerkez

Der einfachste Weg, den ich für das Hinzufügen einer Spalte zu einem DataFrame gefunden habe, war die Funktion "Hinzufügen". Hier ist ein Codeausschnitt, auch bei der Ausgabe in eine CSV-Datei. Beachten Sie, dass Sie durch Hinzufügen des Arguments "Spalten" den Namen der Spalte festlegen können (der mit dem Namen des np.array identisch ist, den ich als Datenquelle verwendet habe).

#  now to create a PANDAS data frame
df = pd.DataFrame(data = FF_maxRSSBasal, columns=['FF_maxRSSBasal'])
# from here on, we use the trick of creating a new dataframe and then "add"ing it
df2 = pd.DataFrame(data = FF_maxRSSPrism, columns=['FF_maxRSSPrism'])
df = df.add( df2, fill_value=0 )
df2 = pd.DataFrame(data = FF_maxRSSPyramidal, columns=['FF_maxRSSPyramidal'])
df = df.add( df2, fill_value=0 )
df2 = pd.DataFrame(data = deltaFF_strainE22, columns=['deltaFF_strainE22'])
df = df.add( df2, fill_value=0 )
df2 = pd.DataFrame(data = scaled, columns=['scaled'])
df = df.add( df2, fill_value=0 )
df2 = pd.DataFrame(data = deltaFF_orientation, columns=['deltaFF_orientation'])
df = df.add( df2, fill_value=0 )
#print(df)
df.to_csv('FF_data_frame.csv')
0
Tony Rollett