获取Pandas数据帧中所选值的行和列标签

时间:2016-06-26 18:44:53

标签: python pandas indexing

我希望得到与数据框中某些条件匹配的值的行和列标签。为了保持它的趣味性,我需要它使用分层(多)索引。例如:

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'))]

请注意我想要一个一般解决方案,它不依赖于单调索引,或者我的示例中的特定选择。这个问题已被多次提出,但答案并未概括:

熊猫真的这么难吗?

1 个答案:

答案 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'))]