2017-03-31 79 views
2
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]}) 

如何,我可以得到列a1a2這是在c1Truec2分別爲元素的索引?獲得大熊貓布爾值的指數 - 蟒蛇

a1的索引應爲[0,2,3],索引a2[0,3]。結果可能是像[[0,2,3],[0,3]]這樣的索引列表。

回答

3

我想你需要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]] 
+0

感謝您的回答。沒有辦法做到這一點,而不必明確指定每一列?我的數據框有很多列,如a1,a2,a3等。 – HappyPy

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