python - 如何创建列以填充从较小数据帧映射的 ID?
问题描述
我有两个数据框,一个有很多包含CategoryId
重复属性的行,另一个数据框只有两列:CategoryId
和Category
:
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
...
解决方案
使用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
推荐阅读
- flutter - 如何使用 Flutter 和 sqflite 从文件加载应用程序开始的数据?
- r - gt表中多列的条件格式
- javascript - 为什么我的javascript函数应该返回false时返回true
- .net - 如何在 C++/CLI 的派生类中实例化泛型基类?
- python-3.x - Cloud Run Qs :: max-instances + concurrency + threads (gunicorn thread)
- c++ - 具有任何函数输入的 sigma 函数
- python - Python:在不同进程之间传递值
- c++ - 为什么我的 C++ 线程池不能加速我的程序?
- javascript - 使用 Vue.js 单击时向下滚动
- flutter - 该方法是在 null 发生的偶然事件上调用的