我有一个包含两层索引和约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
我很感激你的帮助。
额外问题: 此外,知道包含所需值的列是哪一列也会很好。 对于上面的示例,这将是第0列
(对于索引one
)和第1列
(对于索引two
)。有方法可以做到这一点吗?
谢谢!
for 循环
的解决方案,但情况似乎比我想象的更加复杂。感谢您的回答! - BenB