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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
IIUC, was Sie suchen, ist, dass die operativen übereinkommens ist, dass der numpy bool-arrays, nicht-Python-bools:
Gegangen könnte oder so, und wenn der Speicher dient, mindestens eines pandas dev war überrascht über dieses Verhalten, aber tun Sie es auf diese Weise entspricht die Idee, dass die Serie eingegeben werden.
True
undTrue
ist wirklich nicht definiert. So könnte man argumentieren, dass python ist wirklich eine un-pythonic Betrieb (es ist tatsächlich die Nötigung zum int first). Aber Sie Zwang Zwang ist in der Regel NICHT getan numpy/pandas. Seine unpythonic IMHO.Statt
+
verwenden&