我有一个包含两层索引和大约 100 列的多索引数据框。我想根据某个值的存在来获取值组(按列组织),但我仍然在索引机制上苦苦挣扎。
以下是一些示例数据:
import pandas as pd
index_arrays = [np.array(["one"]*5+["two"]*5),
np.array(["aaa","bbb","ccc","ddd","eee"]*2)]
df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9],
[10,11,12],[13,14,15],[16,1,17],
[18,19,20],[21,22,23],[24,25,26],
[27,28,29]], index=index_arrays)
给
0 1 2
one aaa 1 2 3
bbb 4 5 6
ccc 7 8 9
ddd 10 11 12
eee 13 14 15
two aaa 16 1 17
bbb 18 19 20
ccc 21 22 23
ddd 24 25 26
eee 27 28 29
现在,对于每个 level_0 索引(one和two),我想返回 level_1 索引aaa等于某个值的整个列,例如 1。到目前为止我得到的是:
df[df.loc[(slice(None), "aaa"),:]==1].any(axis=1)
>
one aaa True
bbb False
ccc False
ddd False
eee False
two aaa True
bbb False
ccc False
ddd False
eee False
我想检索实际值,而不是布尔值。预期的输出将是:
expected:
0
one aaa 1
bbb 4
ccc 7
ddd 10
eee 13
two aaa 1
bbb 19
ccc 22
ddd 25
eee 28
我会很感激你的帮助。
奖励问题:此外,很高兴知道哪一列包含有问题的值。对于上面的示例,这将是column 0(for index one) 和column 1(for index two)。有没有办法做到这一点?谢谢!