根据浮点值查询数据帧索引

时间:2018-04-19 00:17:57

标签: python pandas dataframe indexing

说我有这样的数据框:

     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

我知道我可以使用df= df.iloc[0:2]这样的东西来提取前3行数据。我的问题是:我可以根据索引值查询索引而不是索引位置吗?

例如,在不使用df= df.iloc[1, 3]的情况下提取index = 8,18的值。

3 个答案:

答案 0 :(得分:4)

是的!使用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

如果索引没有名称,您可以使用ilevel_0

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

回复评论

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

         a    b    c    d    e
index                         
8     -139 -102  112 -100 -112
18     -16   35   62   46   26

答案 1 :(得分:4)

使用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

如果按值选择,则为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

答案 2 :(得分:3)

您可以使用pandas.Index.isin按索引进行过滤:

res = df[df.index.isin([8, 18])]

print(res)

#          a    b    c    d    e
# index                         
# 8     -139 -102  112 -100 -112
# 18     -16   35   62   46   26

或者对于范围:

res = df.loc[(df.index >= 0) & (df.index <= 10)]

print(res)

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