如何将值从一列映射到另一列数据框? [复制]
Posted
技术标签:
【中文标题】如何将值从一列映射到另一列数据框? [复制]【英文标题】:How to map values from a one column to another column of dataframe? [duplicate] 【发布时间】:2018-12-27 23:48:41 【问题描述】:我有两列 company_size
和 company_type
。 company_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的行 你有没有尝试过?这与您回答的上一个问题非常相似。 :)) 我认为它根本不是映射。为什么不只是 groupbycompany_type
和 ffill 或 bfill
与其提出已经在论坛上回答的问题,您可以先做一些研究并为我们所有人节省一些时间:)
我认为人们不愿意发布答案,因为这个问题几乎可以肯定在本网站的其他地方得到了回答,而且今天早些时候回答了一个几乎相同的问题(由你提出),方法很容易展开来回答这个问题。
【参考方案1】:
您可以先按公司规模排序,确保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】: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
【讨论】:
以上是关于如何将值从一列映射到另一列数据框? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Postgres 创建触发器函数以在允许插入之前将值从一列复制到另一列