Python 如何在数据帧中搜索部分字符串并使用Pandas返回特定单元格?

Python 如何在数据帧中搜索部分字符串并使用Pandas返回特定单元格?,python,pandas,csv,dataframe,Python,Pandas,Csv,Dataframe,我有一个带有非标准列的数据框(一路上都不是相同的信息)。我想搜索一个特定的短语,该短语可能出现在行的某一列中,也可能不出现在该列中,然后返回后续单元格的值。例如: A B C How many? 5 Blah blah Blah How many? 7 How many? 13 Blah Blah Blah

我有一个带有非标准列的数据框(一路上都不是相同的信息)。我想搜索一个特定的短语,该短语可能出现在行的某一列中,也可能不出现在该列中,然后返回后续单元格的值。例如:

A               B               C
How many?       5               Blah blah
Blah            How many?       7
How many?       13              Blah
Blah            Blah            Blah

我正在尝试找出如何搜索短语“多少?”然后在下一个单元格中返回值(5/7/13/null)

使用布尔值和
shift

df[df.eq('How many?').shift(1,axis=1).fillna(False)]
Out[142]: 
     A    B    C
0  NaN    5  NaN
1  NaN  NaN    7
2  NaN   13  NaN
3  NaN  NaN  NaN
更新

s1=df.eq('How many?').shift(1,axis=1).fillna(False)
s2=df.eq('How many?')
df[s1|s2]
Out[154]: 
          A          B    C
0  How many?         5  NaN
1       NaN  How many?    7
2  How many?        13  NaN
3       NaN        NaN  NaN

使用布尔和
shift

df[df.eq('How many?').shift(1,axis=1).fillna(False)]
Out[142]: 
     A    B    C
0  NaN    5  NaN
1  NaN  NaN    7
2  NaN   13  NaN
3  NaN  NaN  NaN
更新

s1=df.eq('How many?').shift(1,axis=1).fillna(False)
s2=df.eq('How many?')
df[s1|s2]
Out[154]: 
          A          B    C
0  How many?         5  NaN
1       NaN  How many?    7
2  How many?        13  NaN
3       NaN        NaN  NaN

使用
numpy
array可简化索引:

mask = df.values == 'How many?'
your_list = [df.values[i, j+1] for i, j in zip(*np.where(mask)) if j < df.values.shape[1]-1]
# yourlist = ['5', '7', '13']
mask=df.values==“多少?”
如果j
使用
numpy
数组,以便于索引:

mask = df.values == 'How many?'
your_list = [df.values[i, j+1] for i, j in zip(*np.where(mask)) if j < df.values.shape[1]-1]
# yourlist = ['5', '7', '13']
mask=df.values==“多少?”
如果j
你说的“下一个单元格”是什么意思?右边的一个单元格?是的,我基本上是在尝试搜索一个短语,如果找到了,然后返回该单元格和它右边的单元格(在我的数据集中总是“值”)。我的数据集中有很多垃圾,所以我只想返回这两个项目,并转储行中的所有其他内容。你说的“下一个单元格”是什么意思?右边的一个单元格?是的,我基本上是在尝试搜索一个短语,如果找到了,然后返回该单元格和它右边的单元格(在我的数据集中总是“值”)。我的数据集中有很多垃圾,所以我只想返回这两个项目,并转储行中的所有其他内容。@Alex yep,Fixed这太完美了,谢谢!对python/pandas来说还是相当陌生的,不知道如何转换。我假设你调用shift时的1是将单元格1返回到右边?有没有一种简单的方法可以同时返回带有搜索词的手机和那个手机?@Alex yep,Fixed这太完美了,谢谢!对python/pandas来说还是相当陌生的,不知道如何转换。我假设你调用shift时的1是将单元格1返回到右边?“有没有一种简单的方法可以同时返回带有搜索词的单元格和该单元格?”Alex修复。缺少一个
*
运算符。@Alex已修复。错过了一个
*
操作员。