2017-07-27 62 views
0

我有單詞['light','medium','heavy']的列表,我試圖隔離多個數據框中可能出現這些單詞的列。該dataframes:隔離列表中包含單詞的每一列

df1 
1 | 2 | 3 | 4 | 5 | REF  
    'light' 'medium' 'heavy'  2c17 
    26  42  15   2c17 
    32  52  19   2c17 
    24  37.9  10   2c17 

df2 
1 | 2 | 3 | 4 | 5 | REF  
       21  23   2c16 
      'medium' 'heavy'  2c16 
       52  19   2c16 
       37.9  10   2c16 
df3 
    1  | 2 | 3 | 4 | 5 | REF 
'light'         3c16 
    21          3c16 
    22          3c16 
    23          3c16 

從本質上講,如果列包含從表中的詞,然後找出他們。期望的輸出:

df1 
     2 | 3 | 4 | REF  
    'light' 'medium' 'heavy' 2c17 
    26  42  15 2c17 
    32  52  19 2c17 
    24  37.9  10 2c17 
df2 
      | 3 | 4  | REF  
       21  23  2c16 
      'medium' 'heavy' 2c16 
       52  19  2c16 
       37.9  10  2c16 
df3 
    1  | REF 
'light'  3c16 
    21   3c16 
    22   3c16 
    23   3c16 

到目前爲止我的代碼,其中SH1是dataframes的列表:

listofnewdf = [] 
for num in range(len(sh1)): 
    for i in range(len(sh1[num].columns)): 
     if pd.Series.any(sh1[num].iloc[:,i].str.contains(pat="light|medium|heavy")): 
    listofnewdf.append(pd.DataFrame({sh1[num].columns[i]:sh1[num].iloc[:,i],sh1[num]}) 

然而這產生單獨dataframes每個關鍵字。任何幫助表示讚賞。

回答

0

您可以使用df.isin與布爾索引:

In [1226]: df 
Out[1226]: 
    1 2  3  4 5 REF 
0 NaN NaN  21  23 NaN 2c16 
1 NaN NaN medium heavy NaN 2c16 
2 NaN NaN  52  19 NaN 2c16 
3 NaN NaN 37.9  10 NaN 2c16 

In [1228]: df.loc[:, df.isin(['light', 'medium', 'heavy']).any()] 
Out[1228]: 
     3  4 
0  21  23 
1 medium heavy 
2  52  19 
3 37.9  10 
+0

輝煌,謝謝大家。如果我正確地分解代碼,df.isin()。any()正在查找單詞列表的真實位置?我不知道df.loc可以採取布爾值 – codeninja

+0

@codeninja事實上你是對的。很高興我能幫上忙。 –

相關問題