【问题标题】:Mapping values from series over a column to replace nan values pandas将系列中的值映射到列上以替换 nan 值 pandas
【发布时间】:2020-02-17 11:22:03
【问题描述】:

我有一个 DataFrame,其中包含工作编号和与该工作相关的客户姓名。在某些情况下,工作编号没有客户名称,因此为空。 我有一个单独的系列,其中将这些工作编号作为索引,缺少的客户姓名根据工作编号替换空值。我不完全确定如何将它映射到原始 DataFrame 列。

这是原始的DataFrame(df):

   Job Number  Customer 
0    02123      Paul F
1    46456      nan
2    56823      Kevin T
3    62948      nan

替换nan值的系列:

Job Number
  46456     Kara L
  62948     Sabrina M
  Name: Customers, dtype: object

我需要的最终输出是:

   Job Number  Customer 
0    02123      Paul F
1    46456      Kara L
2    56823      Kevin T
3    62948      Sabrina M

我希望这是有道理的。我查看了其他答案,例如使用:df['Customer'] = df['Job Number'].map(customers) 但这不起作用或test['Customer'] = df['Customer'].combine_first(df['Customer'].map(customers))

我不知道如何将代码粘贴到这里,所以我手写了 df 和 series。

任何帮助将不胜感激。

【问题讨论】:

    标签: python pandas dataframe series


    【解决方案1】:

    这里有必要使用map by column Job Number 而不是Customer

    df['Customer'] = df['Customer'].combine_first(df['Job Number'].map(customers))
    print (df)
       Job Number   Customer
    0        2123     Paul F
    1       46456     Kara L
    2       56823    Kevin T
    3       62948  Sabrina M
    

    详情

    print (df['Job Number'].map(customers))
    0          NaN
    1       Kara L
    2          NaN
    3    Sabrina M
    Name: Job Number, dtype: object
    

    【讨论】:

      【解决方案2】:

      您可以将reset_indexcombine_first 一起使用:

      (df.set_index('JobNumber').squeeze()
         .combine_first(customers.set_index('Job').squeeze())
         .reset_index())
      
             index  Customer
          0   2123     Paul F
          1  46456     Kara L
          2  56823    Kevin T
          3  62948  Sabrina M
      

      【讨论】:

        猜你喜欢
        • 2020-06-24
        • 2023-01-19
        • 2022-11-30
        • 2021-03-08
        • 2013-09-12
        • 2018-12-22
        • 2022-11-29
        相关资源
        最近更新 更多