代码之家  ›  专栏  ›  技术社区  ›  Lynn

通过使用Python映射到数据集中以前的值来创建新列

  •  1
  • Lynn  · 技术社区  · 4 年前

    我有一个数据集df,我想通过获取列值的第一个字母并映射数据集中其他列的值来形成一个新列。

    数据

    id  Date    Model   type    status   
    aa  Q1 2022 orion   hi01    o_hi    
    aa  Q1 2022 orion   hi02    o_hi    
    aa  Q1 2022 orion   hello01 o_hello 
    aa  Q1 2022 orion   go01    o_go    
    bb  Q1 2022 orion   hi01    o_hi    
    bb  Q1 2022 orion   hi02    o_hi    
    bb  Q1 2022 orion   hi03    o_hi    
    
                        
    

    渴望的

    id  Date    Model   type    status  NEW
    aa  Q1 2022 orion   hi01    o_hi    aa o_hi01 Q1 2022
    aa  Q1 2022 orion   hi02    o_hi    aa o_hi02 Q1 2022
    aa  Q1 2022 orion   hello01 o_hello aa o_hello01 Q1 2022
    aa  Q1 2022 orion   go01    o_go    aa o_go01 Q1 2022
    bb  Q1 2022 orion   hi01    o_hi    bb o_hi01 Q1 2022
    bb  Q1 2022 vorion  hi02    v_hi    bb v_hi02 Q1 2022
    bb  Q1 2022 vorion  hi03    v_hi    bb v_hi03 Q1 2022
    

    做

    df['NEW'] = df['id'].map(str) + ' ' + df['Model'].astype(str).str[0] + df['type'].map(str) + ' ' + df['Date'].map(str)
    

    然而,我正在解决如何合并 栏首字母 新形成的列中的值。

    我相信我可以合并。loc

     df['Model'].astype(str).str[0]
    

    任何建议都将不胜感激。

    3 回复  |  直到 4 年前
        1
  •  2
  •   richardec    4 年前

    试试这个:

    df['NEW'] = df['id'].map(str) + ' ' + df['status'].astype(str) + df.groupby(['id', 'status']).cumcount().add(1).astype(str).str.zfill(2) + ' ' + df['Date']
    

    输出:

    >>> df
       id     Date     type   status                   NEW
    0  aa  Q1 2022     hi01     o_hi     aa o_hi01 Q1 2022
    1  aa  Q1 2022     hi02     o_hi     aa o_hi02 Q1 2022
    2  aa  Q1 2022  hello01  o_hello  aa o_hello01 Q1 2022
    3  aa  Q1 2022     go01     o_go     aa o_go01 Q1 2022
    4  bb  Q1 2022     hi01     o_hi     bb o_hi01 Q1 2022
    5  bb  Q1 2022     hi02     o_hi     bb o_hi02 Q1 2022
    6  bb  Q1 2022     hi03     o_hi     bb o_hi03 Q1 2022
    
        2
  •  1
  •   Corralien    4 年前

    你不需要使用 .map(str) 因为你所有的字段都已经是字符串了。如果需要,请使用 df[column].astype(str) 而不是 df[column].map(str) .

    df['New'] = df['id'] + ' ' + df['Model'].str[0] + '_' + df['type'] + ' ' + df['Date']
    print(df)
    
    # Output
       id     Date   Model     type   status                   New
    0  aa  Q1 2022   orion     hi01     o_hi     aa o_hi01 Q1 2022
    1  aa  Q1 2022   orion     hi02     o_hi     aa o_hi02 Q1 2022
    2  aa  Q1 2022   orion  hello01  o_hello  aa o_hello01 Q1 2022
    3  aa  Q1 2022   orion     go01     o_go     aa o_go01 Q1 2022
    4  bb  Q1 2022   orion     hi01     o_hi     bb o_hi01 Q1 2022
    5  bb  Q1 2022  vorion     hi02     o_hi     bb v_hi02 Q1 2022
    6  bb  Q1 2022  vorion     hi03     o_hi     bb v_hi03 Q1 2022
    
        3
  •  0
  •   Lynn    4 年前
    df['NEW'] = df['id'].map(str) + ' ' + df['Model'].astype(str).str[0] + '_' + df['type'].map(str) + ' ' + df['Date'].map(str)