我的任务是从联系人列表中过滤标签,以形成呼叫列表 原始的CSV有一个列列出的“标记”,它们的值不超过6个,因此我将它们分成6个不同的列。6列中有75个惟一的标记,但是不同的标记并不出现在特定的列中,它们出现在列中的顺序是随机的。 然而,与我一起工作的人要求将每个单独的联系人放到一个更大的分组中,同时仍然保留原始的标记。因此,我决定根据6列中单个标记的条件创建第7个标记。他不太关心它是否与列完全匹配,只关心每个带有标记的人都被放置在一个用于调用的列表中。 我基本上已经为标签提供了一个键值对,所以我知道它们属于哪个调用列表。 通常,我只需用键-值对进行替换来限制标记,然后从这里开始,但是我必须保留原始标记。此外,我还处理过数字,我可以把数字放在诸如年龄或收入等级之类的东西上。但是我不知道如何匹配同一行中的其他列。请让我知道,如果我应该搜索不同的条件,任何帮助。
# the key-value pairs
'work' : list1
'hobby' : list2
'family' : list3
'conference' : list4
'extended family' : list3
'high school' : list5
'college' : list5
# sample dataframe
data = [[1,'family','extended family','','','',''], [2,'college','hobby','','','',''],
[3,'college','family','work','','',''], [4,'conference','','','','',''],
[5,'hobby','','','','',''], [6,'college','','','','',''],
[7,'college','work','family','high school','conference','hobby']]
df = pd.DataFrame(data, columns = ['contactID', 'tag1','tag2','tag3','tag4','tag5','tag6'])
df
这是我想要得到的输出
contactID tag1 tag2 tag3 tag4 tag5 tag6 call_list
001 family extended family list3
002 college hobby list2
003 college family work list1
004 conference list4
005 hobby list2
006 college list5
007 college work family high school conference hobby list2
问题来源StackOverflow 地址:/questions/59386592/creating-an-appended-column-based-on-checking-other-strings-from-multiple-column
如果想要每个标记最后匹配的值,请使用Series。与DataFrame地图。栈和 DataFrame。unstack,然后forard补全缺失的值,选择最后一列:
df['call list'] = df.iloc[:, 1:].stack().map(d).unstack().ffill(axis=1).iloc[:, -1]
print (df)
contactID tag1 tag2 tag3 tag4 tag5 \
0 1 family extended family
1 2 college hobby
2 3 college family work
3 4 conference
4 5 hobby
5 6 college
6 7 college work family high school conference
tag6 call list
0 list3
1 list2
2 list1
3 list4
4 list2
5 list5
6 hobby list2
对于所有标签使用apply与连接anf过滤掉缺失的值:
df['call list'] = (df.iloc[:, 1:].stack()
.map(d)
.unstack()
.apply(lambda x: ','.join(y for y in x if y == y), axis=1))
print (df)
contactID tag1 tag2 tag3 tag4 tag5 \
0 1 family extended family
1 2 college hobby
2 3 college family work
3 4 conference
4 5 hobby
5 6 college
6 7 college work family high school conference
tag6 call list
0 list3,list3
1 list5,list2
2 list5,list3,list1
3 list4
4 list2
5 list5
6 hobby list5,list1,list3,list5,list4,list2
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。