2015-03-23 36 views
10

Mam pandasDataFramedf:wyborze wierszy na podstawie wielu wartości kolumn w Pandy dataframe

import pandas as pd 

data = {"Name": ["AAAA", "BBBB"], 
     "C1": [25, 12], 
     "C2": [2, 1], 
     "C3": [1, 10]} 

df = pd.DataFrame(data) 
df.set_index("Name") 

który wygląda po wydrukowaniu (dla porównania):

 C1 C2 C3 
Name    
AAAA 25 2 1 
BBBB 12 1 10 

chciałbym wybrać wiersze, dla których mają wartości między 0 i 20.

Czy możesz zaproponować elegancki sposób wyboru tych wierszy?

+0

Przydaje się, gdy dodajesz formatowanie do pytania, aby ustawić części kodu z części pytań. Zawsze powinieneś także zademonstrować, że najpierw próbowałeś wymyślić własne rozwiązanie i opisać, co próbowałeś. – vlasits

Odpowiedz

12

Myślę, że poniżej powinno to zrobić, ale jego elegancja jest gotowa do dyskusji.

new_df = old_df[((old_df['C1'] > 0) & (old_df['C1'] < 20)) & ((old_df['C2'] > 0) & (old_df['C2'] < 20)) & ((old_df['C3'] > 0) & (old_df['C3'] < 20))] 
9

Krótsza wersja:

In [65]: 

df[(df>=0)&(df<=20)].dropna() 
Out[65]: 
    Name C1 C2 C3 
1 BBBB 12 1 10 
3

Lubię używać df.query() dla tego rodzaju rzeczy

df.query('C1>=0 and C1<=20 and C2>=0 and C2<=20 and C3>=0 and C3<=20') 
0

budowlane na szczycie dwóch ostatnich odpowiedzi: można również użyć frame.query Składnia: a < b < c:

  • df.query("(0 < C1 < 20) and (0 < C2 < 20) and (0 < C3 < 20)")

i/lub frame.query „s @foo składnia (podając jego dokumentacji: "Można odwoływać się do zmiennych w środowisku poprzedzając je z @ charakterem"):

  • df.query("0 < @df < 20").dropna()
Powiązane problemy