2017-06-29 9 views
1

Eine ziemlich grundlegende Frage, Entschuldigung, wenn es vorher gefragt wurde, aber konnte die Antwort nicht finden.Filtern eines Feldes mit mehreren Werten pandas python

Der Versuch, einen Datensatz zu filtern, auf Grund des Geschlechts, so dass ich das Mädchen-Jungen Umsatzverteilung sehen können, aber die Daten nach Titel dh Herr, Frau, Fräulein & Frau

Ich habe für Männer gemacht wird:

men = cd.loc[cd.title_desc == "MR", "SALES"] 

Für Frauen, die ich MR wollen, enthalten MRS & MISS dh

women = cd.loc[cd.title_desc == "MRS" and "MISS" and "MS", "SALES"] 

aber offensichtlich die "und" ist nicht korrekt.

Hilfe geschätzt!

Antwort

2

Dies wurde definitiv vorher gefragt, aber hier gehst du.

men = cd.loc[cd.title_desc == 'MR','SALES'] 
women = cd.loc[cd.title_desc.isin(['MRS','MISS','MS']), 'SALES'] 

Alternativ, wenn Sie gerade zum Gesamtumsatz nach Geschlecht gehen wollen:

Um durch Filterung auf mehreren Werten zwei verschiedene Serien-Objekte erstellen

cd['gender'] = '' 
cd.loc[cd.title_desc == 'MR', 'gender'] = 'men' 
cd.loc[cd.title_desc.isin(['MRS','MISS','MS']), 'gender'] = 'women' 
cd.groupby('gender').agg({'SALES': sum}) 
0

Sie haben es zu brechen in mehrere logische Anweisungen, die Sie dann mit dem logischen oder Operator '|' kombinieren können. Der resultierende boolean Vektor kann mit .loc

bvec = (cd.title_desc == "MRS") | (cd.title_desc == "MISS") | (cd.title_desc == "MS") 
women = cd.loc[bvec,"SALES"] 
0

Es gibt durchaus ein paar Möglichkeiten, in Pandas zu tun, verwendet werden.

Einer der besten IMO der eine @jack6e has shown in his answer.

Alternativ können wir es auf folgende Arten tun:

Mit RegEx suchen:

cd.loc[cd.title_desc.str.contains(r'^MRS|MISS|MS$'), 'SALES'] 

Mit .query() Methode:

titles = ['MRS','MISS','MS'] 
cd.query("title_desc in @titles")['SALES'] 
Verwandte Themen