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?
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
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')