首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >筛选行保存会生成一个新列

筛选行保存会生成一个新列
EN

Stack Overflow用户
提问于 2020-06-28 23:58:35
回答 2查看 51关注 0票数 2

我有一个如下数据集

代码语言:javascript
复制
Name    Surname    Username   Tweet                      Tags    
Matthew Fields     m.fields  I love summertime            summer summertime sun holiday
Fion    Stewart     fion     It is time to enjoy ourselves time
Christine Bold     chris89   Enjoy your summer            summer
Vera    Lovable    v.lov2    It's sunny outside           sun summer holiday

我想在三列(用户名、推文和标签)中搜索以下字符串列表:

代码语言:javascript
复制
list_strings=['summer','summertime','sun','holiday']

查看是否至少在一列中存在上述术语中的一个或多个。这个检查应该保存在一个新的列中,术语从列表中,在那里将存储在所有列中找到的术语(没有重复,即如果相同的术语出现在更多的列中,我只需要提到一次)。

预期输出为:

代码语言:javascript
复制
Name    Surname    Username   Tweet                      Tags                              Terms from list
Matthew Fields     m.fields  I love summertime            summer summertime sun holiday    summer, summertime, sun, holiday
Christine Bold     chris89   Enjoy your summer            summer                            summer
Vera    Lovable    v.lov2    It's sunny outside           sun summer holiday               sun, summer, holiday

你能给我一些关于如何做这件事的建议并给我指出正确的方向吗?谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-29 00:05:06

你可以试试str.contains

代码语言:javascript
复制
df=df[df['Tweet'].str.contains('|'.join(list_strings))]

如果有多个列

代码语言:javascript
复制
df=df[df[['Tweet','Tags']].apply(lambda x : x.str.contains('|'.join(list_strings))).any(1)]
票数 2
EN

Stack Overflow用户

发布于 2020-06-29 02:03:20

尝试下面的步骤。

步骤1:对于df中的每个元素,如果字符串中的任何单词(x.split(‘')i == string)也是list_strings中的单词,则保留它,否则将给出一个空列表([])。即,我们将有一个列表列表(长度为1或0)。所以我们从列表中选择第一项(val),如果它存在的话。

代码语言:javascript
复制
list_strings=['summer','summertime','sun','holiday']

step1 = df[['Username', 'Tweet', 'Tags']].applymap(lambda x: (([val[0] for val in [([string  for i in range(len(x.split(' '))) if (x.split(' ')[i] == string )]) for string in list_strings ] if val]) ))

步骤2:我们将来自三个列的组合列表的唯一元素分配给列"Terms in List“。

代码语言:javascript
复制
df['Terms in list'] = step1.apply(lambda x: set(x[0]  + x[1]  + x[2]), axis = 1) 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62624949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档