获取pandas中的布尔值索引 - python

时间:2017-03-31 15:08:17

标签: python pandas indexing boolean

a=pd.DataFrame({'a1':[1,2,3,4],'a2':[5,6,7,8]})
c=pd.DataFrame({'c1':[True,False,True,True],'c2':[True,False,False,True]})

如何获取列a1a2Truec1列中元素的索引?

c2的索引应为a1,索引为[0,2,3] a2。结果可能是[0,3]等索引列表。

2 个答案:

答案 0 :(得分:4)

我认为你需要where

c.columns = a.columns
df1 = a.where(c)
idx = [df1[x].dropna().index.tolist() for x in df1]
print (idx)
[[0, 2, 3], [0, 3]]

另一种解决方案:

c.columns = a.columns
idx = list(a.where(c).stack().reset_index()
            .groupby('level_1')['level_0'].apply(list))
print (idx)
[[0, 2, 3], [0, 3]]

答案 1 :(得分:2)

目前尚不清楚你想要什么。

这是一种使用stack

的方法
a.stack().index[c.stack().values].to_series()

0  a1    (0, a1)
   a2    (0, a2)
2  a1    (2, a1)
3  a1    (3, a1)
   a2    (3, a2)
dtype: object

如果您只想要索引值列表

a.index.values[c.values.any(1)]

array([0, 2, 3])