开发者社区> 问答> 正文

根据检查来自同一行的多个列的其他字符串创建附加列

我的任务是从联系人列表中过滤标签,以形成呼叫列表 原始的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

展开
收起
kun坤 2019-12-25 21:54:07 446 0
1 条回答
写回答
取消 提交回答
  • 如果想要每个标记最后匹配的值,请使用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  
    
    2019-12-25 21:54:22
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载