python - 列表元素与 pandas 列的关键字匹配

标签 python python-3.x pandas dataframe

我有如下元素列表:

 A=  ['loans','s-class','veyron','trump','rihana','drake','election']

我还有另一个 pandas 数据框 B,其中包含列 categorywords,它是逗号分隔的字符串:-

category              words
audi                  a4, a6
bugatti               veyron, chiron
mercedez              s-class, e-class
dslr                  canon, nikon
apple                 iphone,macbook,ipod
finance               sales,loans,sales price
politics              trump, election, votes
entertainment         spiderman,thor, ironmen
music                 beiber, rihana,drake
........              ..............
.........             .........

我只想将列表 A 的元素映射到列 words 并将相应的 category 分配到一个新列表中。因此,预期输出将是。

matched_categories=['finance','mercedez','bugatti','politics','music','music','politics']

最佳答案

boolean indexing 过滤与 iat选择第一个匹配值:

#if always matched all values
matched_categories = [df.loc[df['words'].str.contains(x), 'category'].iat[0] for x in A]
print (matched_categories)
['finance', 'mercedez', 'bugatti', 'politics', 'music', 'music', 'politics']

如果某些值不匹配,则更通用的解决方案 - 然后返回 不匹配 值:

#added last aaa value
A = ['loans','s-class','veyron','trump','rihana','drake','election','aaa']

matched_categories = [next(iter(df.loc[df['words'].str.contains(x),'category']),'not matched')
                      for x in A]
print (matched_categories)
['finance', 'mercedez', 'bugatti', 'politics', 'music', 'music', 'politics', 'not matched']

关于python - 列表元素与 pandas 列的关键字匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52288130/

相关文章:

Python 类内存使用情况

python - 强制 argparse 将所有内容作为一个输入

python - 计算值并在新的数据框列中添加引用

python - 总结 DataFrame 中的行,同时保持类似的 DataFrame 结构

python - 提高加权移动平均线的表现

python - 将内存中的 OpenCV 图像写入 BytesIO 或 Tempfile

python - 如何在python中将文本编码为base64

python - Anaconda/Spyder突然崩溃并启动错误: Socket issue and/or ImportError

python - 使用 readlines() 打印时出现 IndexError

python - 使用 GroupBy 查找 DataFrame 中的最小值