2016-08-06 14 views
-1

Ich weiß, wie eine Maske erstellen Datenrahmen zu filtern, wenn eine einzelne Spalte Abfrage:von Filterergebnisse in Pandas

import pandas as pd 
import datetime 
index = pd.date_range('2013-1-1',periods=100,freq='30Min') 
data = pd.DataFrame(data=list(range(100)), columns=['value'], index=index) 
data['value2'] = 'A' 
data['value2'].loc[0:10] = 'B' 

data 

    value value2 
2013-01-01 00:00:00 0 B 
2013-01-01 00:30:00 1 B 
2013-01-01 01:00:00 2 B 
2013-01-01 01:30:00 3 B 
2013-01-01 02:00:00 4 B 
2013-01-01 02:30:00 5 B 
2013-01-01 03:00:00 6 B 

Ich benutze eine einfache Maske hier:

mask = data['value'] > 4 
data[mask] 
    value value2 
2013-01-01 02:30:00 5 B 
2013-01-01 03:00:00 6 B 
2013-01-01 03:30:00 7 B 
2013-01-01 04:00:00 8 B 
2013-01-01 04:30:00 9 B 
2013-01-01 05:00:00 10 A 

Meine Frage ist, wie man eine Maske mit mehreren Spalten erstellt? Also, wenn ich dies tun:

data[data['value2'] == 'A' ][data['value'] > 4] 

Diese Filter, wie ich erwarten würde, aber wie erstelle ich eine Bool Maske von dieser als pro meinem anderen Beispiel? Ich habe die Testdaten dafür zur Verfügung gestellt, aber ich möchte häufig eine Maske auf anderen Arten von Daten schaffen, also suche ich nach irgendwelchen Zeigern bitte.

Antwort

2

Ihre booleschen Masken sind boolesch (offensichtlich), also können Sie boolean operations auf ihnen verwenden. Die booleschen Operatoren umfassen (sind aber nicht beschränkt auf) &, |, die Ihre Masken basierend auf einer 'und' Operation oder einer 'oder' Operation kombinieren können. In Ihrem speziellen Fall benötigen Sie eine 'und' Operation. So schreiben Sie einfach Ihre Maske wie folgt:

Dies gewährleistet, dass Sie diejenigen Zeilen auswählen, für die beide Bedingungen gleichzeitig erfüllt sind. Durch Ersetzen der & durch | kann man diejenigen Zeilen auswählen, für die eine der beiden Bedingungen erfüllt sein kann. Sie können Ihr Ergebnis wie gewohnt wählen:

data[mask] 

Obwohl diese Frage von der Antwort auf die Frage beantwortet wird, die in seinem Kommentar weist darauf hin, Ayhan, dachte ich, dass die OP die Idee der Boolesche Operationen fehlte.