【问题标题】:How to map values from a one column to another column of dataframe? [duplicate]如何将值从一列映射到另一列数据框? [复制]
【发布时间】:2018-12-27 23:48:41
【问题描述】:

我有两列 company_sizecompany_typecompany_size 包含我想根据 company_type 列填充的 NaN 值。如何映射到特定值以便我可以填充 NaN 值,即基于 company_type 中的缺失值 company_size

示例数据:

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

现在基于 company_type 我想填写 company_size。

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

注意 company_type 和 company_size 都是分类变量。

【问题讨论】:

  • @stonerock 你可以选择company_size为NaN的行
  • 你有没有尝试过?这与您回答的上一个问题非常相似。 :))
  • 我认为它根本不是映射。为什么不只是 groupby company_type 和 ffill 或 bfill
  • 与其提出已经在论坛上回答的问题,您可以先做一些研究并为我们所有人节省一些时间:)
  • 我认为人们不愿意发布答案,因为这个问题几乎可以肯定在本网站的其他地方得到了回答,而且今天早些时候回答了一个几乎相同的问题(由你提出),方法很容易展开来回答这个问题。

标签: python pandas


【解决方案1】:

您可以先按公司规模排序,确保NaNs 在末尾,然后使用groupbyffill,然后再次按索引排序以恢复原始订单:

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】:

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

【讨论】:

    猜你喜欢
    • 2018-02-13
    • 2020-10-04
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    相关资源
    最近更新 更多