【问题标题】:Creating a new column with concatenated values from another column使用来自另一列的连接值创建一个新列
【发布时间】:2021-04-12 00:28:45
【问题描述】:

我正在尝试在此数据框中创建一个新列。数据集对于每个 PERSON 都有多条记录,因为每条记录都是不同的帐户。新列值应该是 TYPE 列中每个 PERSON 的值的组合。例如,如果 John Doe 有四个帐户,则新列中他的 nae 旁边的值应该是 TYPE 中值的串联。下面是最终数据框的示例。提前致谢。

enter image description here

【问题讨论】:

    标签: python concatenation


    【解决方案1】:

    您可以用两行代码完成此操作(首先是代码,然后是解释):

    代码:

    in: name_types = df.pivot_table(index='Name', values='AccountType', aggfunc=set)
    out:
                    AccountType
    Name    
    Jane Doe        {D}
    John Doe        {L, W, D}
    Larry Wild      {L, D}
    Patti Shortcake {L, W}
    
    in: df['ClientType'] = df['Name'].apply(lambda x: name_types.loc[x]['AccountType'])
    

    说明:

    1. 数据透视表获取每个单独名称的所有 AccountType,并使用“set”聚合函数删除所有重复项。

    2. apply 函数然后遍历主数据框中的每个“名称”,查找与 name_typed 中的每个关联的 AccountType,并将其添加到主数据框中的新列 ClientType。

    你就完成了!

    附录: 如果您需要将列作为字符串而不是集合,请使用:

    in: def to_string(the_set):
        string = ''
        for item in the_set:
            string += item
        return string
    
    in: df['ClientType'] = df['ClientType'].apply(to_string)
    
    in: df.head()
    out: 
    
    Name    AccountType ClientType
    0   Jane Doe    D   D
    1   John Doe    D   LDW
    2   John Doe    D   LDW
    3   John Doe    L   LDW
    4   John Doe    D   LDW
    

    【讨论】:

    • 太棒了!请标记已接受的答案,以便社区知道继续前进并帮助他人。谢谢,祝你好运!
    • 我对此有一个后续问题。当我尝试运行 df['ClientType'].unique() 时,我收到一条警告说要使用 name_types.loc[row_index, column_index] = values。最终输出似乎也显示了列信息的 NaN。有什么解决方案可以让数据帧恢复原样而不是切片副本?
    • 您是否将集合转换为字符串?集合会导致散列函数出现问题,这可能是问题所在。我修改了上面的答案,将列从集合转换为字符串。这是否为您解决了问题?
    猜你喜欢
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 2020-12-17
    • 2020-07-07
    • 1970-01-01
    • 2014-07-08
    相关资源
    最近更新 更多