我有两个数据帧categories
和data
,并想基于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
似乎已经足够好了,但是它合并了所有数据,并且删除了不需要的列使过程效率低下。有什么好办法实现这一目标?
答案 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']]