如何将值从一列映射到另一列数据框? [复制]

Posted

技术标签:

【中文标题】如何将值从一列映射到另一列数据框? [复制]【英文标题】: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 与其提出已经在论坛上回答的问题,您可以先做一些研究并为我们所有人节省一些时间:) 我认为人们不愿意发布答案,因为这个问题几乎可以肯定在本网站的其他地方得到了回答,而且今天早些时候回答了一个几乎相同的问题(由你提出),方法很容易展开来回答这个问题。 【参考方案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

【讨论】:

以上是关于如何将值从一列映射到另一列数据框? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

SQL根据条件将值从一列复制到另一列

Pandas 根据非恒定值的第三列将值从一列复制到另一列

Postgres 创建触发器函数以在允许插入之前将值从一列复制到另一列

在同一个表中将值从一列复制到另一列

Liquibase:将值从一列复制到具有数组数据类型的另一列

有效地将值从一列替换到另一列 Pandas DataFrame