Pandas: Summe von zwei boolean-Serie

In Python:

In [1]: True+True
Out[1]: 2

Also nach folgendem set-up:

import pandas as pd
ser1 = pd.Series([True,True,False,False])
ser2 = pd.Series([True,False,True,False])

Was ich will, ist das finden der element-wise Summe ser1 und ser2 mit den booleans behandelt als ganze zahlen für die addition wie in der Python-Beispiel.

Aber Pandas behandelt, die zudem als ein-element-wise "oder" - operator, und gibt die folgende (unerwünschte) Ausgabe:

In [5]: ser1+ser2
*/lib/python2.7/site-packages/pandas/computation/expressions.py:184: UserWarning: evaluating in Python space because the '+' operator is not supported by numexpr for the bool dtype, use '|' instead
  unsupported[op_str]))
Out[5]: 
0     True
1     True
2     True
3    False
dtype: bool

Ich weiß, bekomme ich kann meinen gewünschte Ausgabe mit astype(int) entweder Serie:

In [6]: ser1.astype(int) + ser2
Out[6]: 
0    2
1    1
2    1
3    0
dtype: int64

Gibt es einen anderen (mehr "pandonic") Weg, um den [2,1,1,0] Serie? Gibt es eine gute Erklärung dafür, warum die einfache Serie hinaus funktioniert hier nicht?

  • Ich bin mir nicht sicher, ob ich Folgen: wenn Sie möchten, gönnen Sie sich ein boolean-Serie, als ob die Elemente wurden ints und nicht bools, ruft astype(int) klingt, als pandorable wie es geht. Welche Erklärung suchst du?
  • Richtig, ich sehe, dass es funktioniert. Meine Frage ist mehr über, warum die pandas + Betrieb auf Serie nicht das gleiche Ergebnis wie der element-wise python + Betrieb.
InformationsquelleAutor exp1orer | 2014-08-13
Schreibe einen Kommentar