2012-03-30 16 views
1

Kürzlich mit zwei Serien in Pandas eine Arbeit, die ich mache:Pandas: ändern Sie eine Serie durch einen zweiten mit dem gleichen Index mit

  • Die erste Serie enthält rein numerische Daten
  • Die zweite Serie enthält kategorische Daten: "Plus", "Minus" und NaN.

Beispieldaten:

first_series = pandas.Series([0.000003, 0.004991, 0.004991]) 
second_series = pandas.Series(["Plus", "Minus", np.nan], dtype="object", 
           index=first_series.index) 

(in dem realen Szenario wird die zweite Serie programmatisch mit dem gleichen Index wie die ersten gebaut, aber es ist hier nur ein vereinfachtes Beispiel)

ich zuerst eine Manipulation zu tun:

first_series = np.log2(1/first_series) 

Dann brauche ich würde das Vorzeichen invertieren (Multiplikation mit -1) des entsprechenden „M inus "Einträge, und wenden Sie sich an NaN diejenigen, die in der zweiten Serie sind NaN.

Der letzte Teil funktioniert OK:

first_series[np.invert(second_series.notnull())] = np.nan 

print first_series 

0 18.567557 
1  7.646459 
2   NaN 
Name: Example data 

Allerdings bin ich irgendwie stecken mit dem früheren Teil. Wie kann ich die Informationen in der zweiten Serie verwenden (da sie identisch indexiert sind), um das Zeichen in der ersten Serie zu wechseln?

Als Referenz nach der Anwendung, first_series sollte wie folgt sein:

0 18.567557 
1 -7.646459 
2   NaN 
Name: Example data 

Antwort

2
first_series[second_series == 'Minus'] *= -1 
first_series[second_series.isnull()] = np.nan 

gibt Ihnen:

0 18.346606 
1 -7.646455 
2   NaN 
+0

Es ist nicht von Pandas in der aktuellen Kasse funktioniert I‘ m verwenden. Ich werde einen Fehler einreichen. – Einar