2017-01-12 3 views
1

I-Daten in Blöcken wie dies aus einer CSV lese:Pandas Hinzufügen einige zusätzliche Spalten basierend auf viele Bedingungen

 for chunk in pd.read_csv(file, chunksize=50000, names = col_names, header = 0, dtype = dtype): 
      chunk['derived_field_1'] = [1 if x == 'High' else -1 for x in chunk['indicator']] 

Die oben arbeitet und es basiert auf einer Bedingung. Ich möchte dies basierend auf Bedingungen auf zwei Feldern tun. die Gesamtzahl der Kombinationen von Werten zu machen Als Beispiel seine 8.

chunk['derived_field_2'] = [chunk['column_1'] if ((x == 'Red' for x in chunk['Color']) and (y == 'High' for y in chunk['Indicator'])) else 
          chunk['column_2'] if ((x == 'Green' for x in chunk['Color']) and (y == 'Low' for y in chunk['Indicator'])) else 0] 

ich die oben und fahre mit dem anderen Zustand für 6 weitere Bedingungen wie die oben tun will. Dies ist fehlgeschlagen, die beiden for-Schleifen funktionieren nicht. Ich bekomme diesen Fehler -

raise ValueError('Length of values does not match length of ' 'index') 
ValueError: Length of values does not match length of index 

Würde jemand den Grund für diesen Fehler wissen?

Antwort

2

Sie können numpy.where für eine vektorisiert Lösung verwenden:

import numpy as np 
chunk['derived_field_2'] = (np.where((chunk['Color'] == "Red") & (chunk["Indicator"] == "High"), chunk["column_1"], 
    np.where((chunk['Color'] == "Green") & (chunk["Indicator"] == "Low"), chunk["column_2"], 0)) 
+1

Danke für die Antwort :) – CodeGeek123

+0

Hallo dies immer noch den Fehler auslöst: raise Valueerror (‚Länge von Werten entspricht nicht Länge von‘ ‚index‘) ValueError: Die Länge der Werte stimmt nicht mit der Länge des Index überein. Hast du das schon einmal gesehen? Ich habe die min_itemsize auf eine höhere Nummer gesetzt, aber das hat nicht funktioniert. – CodeGeek123

+0

Ich kann mir keinen Grund vorstellen, warum es scheitern würde. Nur auf einer kleinen Datei getestet, scheint gut zu funktionieren. – Psidom

Verwandte Themen