【问题标题】:keywords matching of list elements with pandas column列表元素与 pandas 列的关键字匹配
【发布时间】:2019-02-16 16:17:51
【问题描述】:

我的元素列表如下:

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

我还有另一个熊猫数据框 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']

【问题讨论】:

  • 你可以像这样选择一行df[df['words'].str.contains('loans')]

标签: python python-3.x pandas dataframe


【解决方案1】:

boolean indexingiat 过滤以选择第一个匹配值:

#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']

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

#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']

【讨论】:

  • @Mavrick - 存在一些值不匹配的问题,需要第二个解决方案 - 就像列表的最后一个值 aaa
  • @Mavrick - 您可以在末尾添加matched_categories = [x for x in matched_categories if x != 'not matched']
  • @Mavrick - 订购重要吗?
  • @Mavrick - 嗯,可以创建新的问题以供参考吗?因为在 StackOveflow 中不推荐仍然编辑问题。
  • @Mavrick - 当然,解决方案将被重写。
猜你喜欢
  • 2019-01-05
  • 1970-01-01
  • 2020-05-18
  • 2019-02-24
  • 2018-04-15
  • 1970-01-01
  • 2019-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多