【问题标题】:Isolate every column that contains a word from a list从列表中隔离包含单词的每一列
【发布时间】:2017-07-27 20:21:52
【问题描述】:

我有一个单词列表 ['light','medium','heavy'],我正在尝试隔离多个数据框中可能出现这些单词的列。数据框:

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 是数据帧列表:

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

但是,这会为每个关键字生成单独的数据框。任何帮助表示赞赏。

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:

    您可以将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
    

    【讨论】:

    • 太棒了,谢谢。如果我正确地分解了你的代码,df.isin().any() 正在寻找单词列表的真实位置?我不知道 df.loc 可以采用布尔值
    • @codeninja 确实你是对的。很高兴我能帮上忙。
    猜你喜欢
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多