首页 > 解决方案 > 如何创建列以填充从较小数据帧映射的 ID?

问题描述

我有两个数据框,一个有很多包含CategoryId重复属性的行,另一个数据框只有两列:CategoryIdCategory

print(map)
   CategoryId  Category
1  n013523     Snake
2  n012837     Iguana
3  n092735     Dragon

map.shape
(3, 2)


print(data)
   CategoryId  Size
1  n013523     0.4
2  n013523     0.8
3  n013523     0.15
4  n012837     0.16
5  n012837     0.23
6  n012837     0.42
...

data.shape
(500000, 2)

我想要做的是在数据上创建一个列,该列将具有map['Category']where的值map['CategoryId'] == data['CategoryId'],这样输出是:

print(data)
   CategoryId  Size  Category
1  n013523     0.4   Snake
2  n013523     0.8   Snake
3  n013523     0.15  Snake
4  n012837     0.16  Iguana
5  n012837     0.23  Iguana
6  n012837     0.42  Iguana
...

标签: pythonpandasdataframedata-science

解决方案


使用map函数:

map.set_index('CategoryId',inplace=True)
data['Category'] = data['CategoryId'].map(map['Category'],na_action=np.nan)

merge用作:

data = data.merge(map,how='left',on='CategoryId')

或使用dict和映射:

data['Category'] = data.CategoryId.map(dict(map.values),na_action=np.nan)

或者,如果字典不存在,使用dict和替换它可能会出错。:key

data['Category'] = data.CategoryId.replace(dict(map.values))

print(data)
      CategoryId  Size Category
    1    n013523  0.40    Snake
    2    n013523  0.80    Snake
    3    n013523  0.15    Snake
    4    n012837  0.16   Iguana
    5    n012837  0.23   Iguana
    6    n012837  0.42   Iguana

推荐阅读