这是我的数据框:

import pandas as pd
df = pd.DataFrame({'a': ['axy a', 'xyz b'], 'b': ['obj e', 'oaw r']})

我有一个字符串列表:

s1 = 'lorem obj e'
s2 = 'lorem obj e lorem axy a'
s3 = 'lorem xyz b lorem oaw r'
s4 = 'lorem lorem oaw r'
s5 = 'lorem lorem axy a lorem obj e'
s_all = [s1, s2, s3, s4, s5]

现在我要取每一行,并判断该行的两列是否都出现在s_all的任何字符串中.例如,对于第一行,我 Select axy_aobj_e,并判断它们是否都出现在s_all的字符串中.他们都出现在s2号和s5号.

我想要的结果如下所示:

       a      b      c
0  axy a  obj e  lorem obj e lorem axy a
1  axy a  obj e  lorem lorem axy a lorem obj e
2  xyz b  oaw r  lorem xyz b lorem oaw r

以下是我的try ,但没有奏效:

l = []
for sentence in s_all:
    for i in range(len(df)):
        if df.a.values[i] in sentence and df.b.values[i] in sentence:
            l.append(sentence)
        else:
            l.append(np.nan)

我试图将结果追加到一个列表中,然后使用该列表创建我想要的c列,但不起作用.

推荐答案

您可以使用带有DataFrame的applyexplodeconcat来创建新的序列对象

match_series = df.apply(lambda row: [s for s in s_all if row['a'] in s and row['b'] in s], axis=1).explode()
pd.concat([df, match_series], axis=1)

Output

       a      b                              0
0  axy a  obj e        lorem obj e lorem axy a
0  axy a  obj e  lorem lorem axy a lorem obj e
1  xyz b  oaw r        lorem xyz b lorem oaw r

Python相关问答推荐

根据在同一数据框中的查找向数据框添加值

numba jitClass,记录类型为字符串

用Python解密Java加密文件

从groupby执行计算后创建新的子框架

OR—Tools CP SAT条件约束

梯度下降:简化要素集的运行时间比原始要素集长

ThreadPoolExecutor和单个线程的超时

在Django admin中自动完成相关字段筛选

不能使用Gekko方程'

让函数调用方程

在输入行运行时停止代码

为什么在FastAPI中创建与数据库的连接时需要使用生成器?

计算空值

用fft计算指数复和代替求和来模拟衍射?

如何在PythonPandas 中对同一个浮动列进行逐行划分?

合并相似列表

如何将一个文件的多列导入到Python中的同一数组中?

如何获取给定列中包含特定值的行号?

如何通过函数的强式路径动态导入函数?

运行从Airflow包导入的python文件,需要airflow实例?