我希望得到与数据框中某些条件匹配的值的行和列标签。为了保持它的趣味性,我需要它使用分层(多)索引。例如:
df = pd.DataFrame(np.arange(16).reshape(4, 4), columns=pd.MultiIndex.from_product((('a', 'b'), ('x', 'y'))))
a b
x y x y
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
3 12 13 14 15
现在让我们说我想要
元素的行和列标签df % 6 == 0
a b
x y x y
0 True False False False
1 False False True False
2 False False False False
3 True False False False
我想得到
[(0, ('a', 'x')), (1, ('b', 'x')), (3, ('a', 'x'))]
请注意我想要一个一般解决方案,它不依赖于单调索引,或者我的示例中的特定选择。这个问题已被多次提出,但答案并未概括:
熊猫真的这么难吗?
答案 0 :(得分:3)
使用np.where
获取True值的序数索引:
import numpy as np
import pandas as pd
df = pd.DataFrame(np.arange(16).reshape(4, 4),
columns=pd.MultiIndex.from_product((('a', 'b'), ('x', 'y'))))
mask = (df % 6 == 0)
i, j = np.where(mask)
print(list(zip(df.index[i], df.columns[j])))
产量
[(0, ('a', 'x')), (1, ('b', 'x')), (3, ('a', 'x'))]