【问题标题】:pandas: return a value from a list column based on a condition in another list columnpandas:根据另一个列表列中的条件从列表列中返回一个值
【发布时间】:2021-04-23 18:43:34
【问题描述】:

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

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 更改为 verb 以测试样本数据,预期输出是什么?
  • 感谢您的帮助。我已经过滤了那些有形容词的,但你的回答也涵盖了。谢谢

标签: python pandas list conditional-statements subset


【解决方案1】:

如果每个列表中始终存在adj,则按.index 获取索引并从第二个列表中选择值:

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

替代apply:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-20
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 2018-08-07
    相关资源
    最近更新 更多