Angenommen, ich habe einen Datenrahmen wie diesen:

     a  b  c  d  e
index                                             
0       -202     -236      135     -178     -186
8       -139     -102      112     -100     -112
10       -77      -33       89      -22      -37
18       -16       35       62       46       26
20        45       67       36      114       90

Und ich weiß, dass ich so etwas wie df= df.iloc[0:2] verwenden kann, um die ersten 3 Datenzeilen zu extrahieren. Meine Frage ist: Kann ich den Index basierend auf dem Indexwert und nicht auf der Indexposition abfragen?

Extrahieren Sie beispielsweise Werte mit index = 8,18, ohne df= df.iloc[1, 3] zu verwenden.

3
user9454050 19 Apr. 2018 im 03:17

3 Antworten

Beste Antwort

Mit get_level_values

df[df.index.get_level_values(0)<=10]
Out[654]: 
         a    b    c    d    e
index                         
0     -202 -236  135 -178 -186
8     -139 -102  112 -100 -112
10     -77  -33   89  -22  -37

Wenn nach Wert ausgewählt, ist dies loc

df.loc[[8,10],:]
Out[695]: 
         a    b    c    d    e
index                         
8     -139 -102  112 -100 -112
10     -77  -33   89  -22  -37
4
YOBEN_S 19 Apr. 2018 im 01:08

Ja! Verwenden Sie query

df.query('index <= 10')

         a    b    c    d    e
index                         
0     -202 -236  135 -178 -186
8     -139 -102  112 -100 -112
10     -77  -33   89  -22  -37

Wenn der Index keinen Namen hatte, können Sie ilevel_0 verwenden

df.index.name = None

df.query('ilevel_0 <= 10')

      a    b    c    d    e
0  -202 -236  135 -178 -186
8  -139 -102  112 -100 -112
10  -77  -33   89  -22  -37

Auf Kommentar antworten

df.query('index in [8, 18]')

         a    b    c    d    e
index                         
8     -139 -102  112 -100 -112
18     -16   35   62   46   26
4
piRSquared 19 Apr. 2018 im 01:04