2017-06-27 2 views
0

Ich habe zwei booleschen Spalten A und B in einem Pandas-Datenfeld, jedes mit fehlenden Daten (dargestellt durch NaN). Was ich will, ist eine UND-Operation für die beiden Spalten, aber ich möchte, dass die resultierende boolesche Spalte NaN ist, wenn eine der ursprünglichen Spalten NaN ist. Ich habe die folgende Tabelle:Pflegen Sie NaN-Werte in Pandas booleschen Vergleich

A  B 
0 True True  
1 True False 
2 False True 
3 True NaN  
4 NaN NaN 
5 NaN False 

Nun, wenn ich df.A & df.B will ich:

0 True 
1 False 
2 False 
3 NaN 
4 NaN 
5 False 
dtype: bool 

sondern ich:

0 True 
1 False 
2 False 
3 True 
4 True 
5 False 
dtype: bool 

Dieses Verhalten steht im Einklang mit np.bool(np.nan) & np.bool(False) und seinen Permutationen, aber was ich wirklich will, ist eine Spalte, die mir mit Sicherheit sagt, ob jede Zeile für beide wahr ist oder ob sie für beide nicht wahr sein kann. Wenn ich weiß, dass es für beide wahr ist, dann sollte das Ergebnis wahr sein, wenn ich weiß, dass es für mindestens eins falsch ist, dann sollte es falsch sein, und sonst brauche ich NaN, um zu zeigen, dass das Datum fehlt.

Gibt es einen Weg, dies zu erreichen?

+1

Letzter Wert in den gewünschten Ausgang ist nicht 'NaN'? – jezrael

+0

Verwenden Sie 'numpy.logical_and'. – Goyo

+0

Nein, solange ich weiß, dass mindestens einer der Einträge False ist, weiß ich, dass sie nicht beide wahr sind. –

Antwort

3

des np.logical_and Lassen Sie verwenden:

import numpy as np 
import pandas as pd 
df = pd.DataFrame({'A':[True, True, False, True, np.nan, np.nan], 
        'B':[True, False, True, np.nan, np.nan, False]}) 

s = np.logical_and(df['A'],df['B']) 
print(s) 

Ausgang:

0  True 
1 False 
2 False 
3  NaN 
4  NaN 
5 False 
Name: A, dtype: object 
Verwandte Themen