多索引数据框中的多行选择
multiple row selection in multi indexed dataframe
假设我在 pandas 中编写此代码来创建数据框:
pd.DataFrame({'x':random.sample(range(1,100), 4),
'y':random.sample(range(1,100), 4),
'z':random.sample(range(1,100), 4)},
index = [['a1', 'b1', 'c1','d1'], ['a2', 'b2', 'c2', 'd2']])
这会产生以下数据框:
x y z
a1 a2 8 2 85
b1 b2 43 93 58
c1 c2 1 46 24
d1 d2 60 37 62
我想 select 通过传递一个列表来 select 多索引行:
[[a1, a2], [b1, b2], [c1, c2]]
到return:
x y z
a1 a2 8 2 85
b1 b2 43 93 58
c1 c2 1 46 24
pandas 中是否有函数可以做到这一点?
您可以 select 使用索引 df.iloc
import pandas as pd
import random
df = pd.DataFrame({'x':random.sample(range(1,100), 4),
'y':random.sample(range(1,100), 4),
'z':random.sample(range(1,100), 4)},
index = [['a1', 'b1', 'c1','d1'], ['a2', 'b2', 'c2', 'd2']])
df.iloc[0:3]
returns
x y z
a1 a2 51 36 70
b1 b2 37 45 63
c1 c2 96 16 64
您非常接近:您需要将索引定义为元组列表而不是列表列表:
target_index = [('a1', 'a2'), ('b1', 'b2'), ('c1', 'c2')]
然后
df.loc[target_index]
给你想要的输出:
x y z
a1 a2 0 2 3
b1 b2 1 3 4
c1 c2 2 4 5
假设我在 pandas 中编写此代码来创建数据框:
pd.DataFrame({'x':random.sample(range(1,100), 4),
'y':random.sample(range(1,100), 4),
'z':random.sample(range(1,100), 4)},
index = [['a1', 'b1', 'c1','d1'], ['a2', 'b2', 'c2', 'd2']])
这会产生以下数据框:
x y z
a1 a2 8 2 85
b1 b2 43 93 58
c1 c2 1 46 24
d1 d2 60 37 62
我想 select 通过传递一个列表来 select 多索引行:
[[a1, a2], [b1, b2], [c1, c2]]
到return:
x y z
a1 a2 8 2 85
b1 b2 43 93 58
c1 c2 1 46 24
pandas 中是否有函数可以做到这一点?
您可以 select 使用索引 df.iloc
import pandas as pd
import random
df = pd.DataFrame({'x':random.sample(range(1,100), 4),
'y':random.sample(range(1,100), 4),
'z':random.sample(range(1,100), 4)},
index = [['a1', 'b1', 'c1','d1'], ['a2', 'b2', 'c2', 'd2']])
df.iloc[0:3]
returns
x y z
a1 a2 51 36 70
b1 b2 37 45 63
c1 c2 96 16 64
您非常接近:您需要将索引定义为元组列表而不是列表列表:
target_index = [('a1', 'a2'), ('b1', 'b2'), ('c1', 'c2')]
然后
df.loc[target_index]
给你想要的输出:
x y z
a1 a2 0 2 3
b1 b2 1 3 4
c1 c2 2 4 5