如何在df中添加具有df2中相同列的映射值的列?

时间:2019-07-23 16:18:20

标签: python pandas

我有两个数据帧categoriesdata,并想基于data的一列向categories添加一列。这是有关这些数据帧的一些信息。

items: DataFrame | (22170, 3) | Column names: item_name, item_id, item_category_id
data:  DataFrame | (2935849, 6) | Column names: date, date_block_num, shop_id, item_id, item_price, item_cnt_day

共有83个项目类别和22169个唯一项目。我希望将item_category_id添加到数据中,使其值唯一等于每个item_id。我在SO上浏览了一些帖子,但是它们对于需要更简单映射的较小数据集或集合来说似乎很完美。我正在寻找的是这个

print(data.head())
date   shop_id  item_id  item_category_id -> # Newly added column
D.M.Y  50       22142    32
D.M.Y  25       521      12
D.M.Y  25       541      57
.
. 
D.M.Y  44       42       83

merge似乎已经足够好了,但是它合并了所有数据,并且删除了不需要的列使过程效率低下。有什么好办法实现这一目标?

2 个答案:

答案 0 :(得分:1)

您只能merge在包含最终结果中所需列的DataFrames切片上:

data_cols = ['date', 'shop_id', 'item_id']
items_cols = ['item_id', 'item_category_id']

pd.merge(data[data_cols], items[items_cols], how='left', on='item_id')

或者,您可以创建一个查找字典(或系列),然后使用map

lookup = dict(zip(items['item_id'], items['item_category_id']))
data['item_category_id'] = data['item_id'].map(lookup)

答案 1 :(得分:0)

我认为merge是您的最佳选择。在效率方面,也许尝试merge,然后尝试简单但有效的

df = df[['date', 'shop_id', 'item_id', 'item_category_id']]