说我有这样的数据框:
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的值。
答案 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