从列表中分离出每个包含单词的列

2024-04-27 00:37:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个单词列表['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]})

但是,这会为每个关键字生成单独的数据帧。感谢您的帮助


Tags: 数据inref列表for单词numlight
1条回答
网友
1楼 · 发布于 2024-04-27 00:37:30

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

相关问题 更多 >