代码之家  ›  专栏  ›  技术社区  ›  stone rock

如何将值从dataframe的一列映射到另一列?[副本]

  •  -3
  • stone rock  · 技术社区  · 6 年前

    我有两列 company_size company_type 是的。 公司规模 包含要根据其填充的NaN值 公司类型 列。如何映射到特定值以便填充NaN值,即 公司规模 基于 公司类型 是的。

    示例数据:

     company_size    company_type
       10-50           startup
       1000+            PvtLtd
       NaN           Public Sector
       NaN              PvtLtd
       100-500       Public Sector
       NaN             startup
       100-500       Public Sector
    

    现在公司类型我想填补公司规模。

    startup -> 10-50
    Public Sector -> 100-500
    PvtLtd -> 1000+
    

    注:公司类型和公司规模都是分类变量。

    2 回复  |  直到 6 年前
        1
  •  3
  •   sacuL    6 年前

    你可以先按公司规模排序,以确保 NaN s在末尾,然后使用 groupby ffill ,然后再次按索引排序以重新安装原始订单:

    df.sort_values('company_size').groupby('company_type').ffill().sort_index()
    
      company_size   company_type
    0        10-50        startup
    1        1000+         PvtLtd
    2      100-500  Public Sector
    3        1000+         PvtLtd
    4      100-500  Public Sector
    5        10-50        startup
    6      100-500  Public Sector
    
        2
  •  3
  •   user3483203    6 年前

    groupby 你的公司时间,和 transform('first') 要去除NaN值:

    df['company_size'] = df.groupby("company_type")["company_size"].transform("first")
    
      company_size  company_type
    0        10-50       startup
    1        1000+        PvtLtd
    2      100-500  PublicSector
    3        1000+        PvtLtd
    4      100-500  PublicSector
    5        10-50       startup
    6      100-500  PublicSector