Python pandas:根据另一个列表列中的条件从列表列返回值

Python pandas:根据另一个列表列中的条件从列表列返回值,python,pandas,list,conditional-statements,subset,Python,Pandas,List,Conditional Statements,Subset,我有一个类似于下面的列表列的大型数据框,但有更多的行和列: import pandas as pd data = {'First': [['First', 'value'],['second','value'],['third','value','is'],['fourth','value','is']], 'Second': [['adj','noun'],['adj','noun'],['adj','noun','verb'],['adj','noun','verb']]} df =

我有一个类似于下面的列表列的大型数据框,但有更多的行和列:

import pandas as pd

data = {'First':  [['First', 'value'],['second','value'],['third','value','is'],['fourth','value','is']],
'Second': [['adj','noun'],['adj','noun'],['adj','noun','verb'],['adj','noun','verb']]}

df = pd.DataFrame (data, columns = ['First','Second'])
如果第一列中的值等于第二列中的条件,我想从第一列返回该值。所以我喜欢的是第三列,如果第二列中的值等于'adj'

所需的第三列:

third column:
first
second
third
fourth
由于我的数据集很大,我至少尝试过过滤数据集中包含值“adj”的行,但不知道如何继续:

df[['First','Second']][df['Second'].map(set(['adj']).issubset)]

如果每个列表中始终有
adj
,则通过
获取索引。索引
并从第二个列表中选择按其值:

df['new'] = [a[b.index('adj')] for a, b in df[['First','Second']].to_numpy()]
如果不存在更一般的工作方式
adj

df['new'] = [a[b.index('adj')] if 'adj' in b else None 
              for a, b in df[['First','Second']].to_numpy()]
使用
应用的备选方案

f = lambda x: x['First'][x['Second'].index('adj')] if 'adj' in x['Second'] else None
df['new'] = df.apply(f, axis=1)


print (df)
                 First             Second     new
0       [First, value]        [adj, noun]   First
1      [second, value]        [adj, noun]  second
2   [third, value, is]  [adj, noun, verb]   third
3  [fourth, value, is]  [adj, noun, verb]  fourth

如果每个列表中始终有
adj
,则通过
获取索引。索引
并从第二个列表中选择按其值:

df['new'] = [a[b.index('adj')] for a, b in df[['First','Second']].to_numpy()]
如果不存在更一般的工作方式
adj

df['new'] = [a[b.index('adj')] if 'adj' in b else None 
              for a, b in df[['First','Second']].to_numpy()]
使用
应用的备选方案

f = lambda x: x['First'][x['Second'].index('adj')] if 'adj' in x['Second'] else None
df['new'] = df.apply(f, axis=1)


print (df)
                 First             Second     new
0       [First, value]        [adj, noun]   First
1      [second, value]        [adj, noun]  second
2   [third, value, is]  [adj, noun, verb]   third
3  [fourth, value, is]  [adj, noun, verb]  fourth

您可以使用
np.where

做:

输出:


您可以使用
np.where

做:

输出:


是的,我正在处理它,将使用np编辑它。Where是的,我正在处理它,将使用np编辑它。Where如果将
adj
更改为
verb
,以便在样本数据中进行测试,预期输出是什么?感谢您的帮助。我已经过滤了那些有形容词的词,但你的回答也涵盖了这一点。如果将
adj
更改为
verb
以在示例数据中进行测试,那么预期的输出是什么?谢谢您的帮助。我已经过滤了那些有形容词的词,但你的回答也涵盖了这一点。非常感谢。