pandas |根据条件从另一个数据帧获取数据

2024-09-28 21:25:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧:

products

+------------+--------------------+
| item_name  | item_tags          |
+------------+--------------------+
| blue_shirt | summer,winter,blue |
|            |                    |
+------------+--------------------+
| red_skirt  | spring,summer      |
+------------+--------------------+

orders

+------------+
| item       |
+------------+
| blue_shirt |
+------------+
| red_skirt  |
+------------+

我想在orders中创建一个新列:当products.item_name==orders.item时,我想取products.item_tags的值并将其添加到orders中

我试过:

orders['ItemTags'] = products.query("{0}=={1}".format(orders['item'], products['item_name']))['Tags']

但这给了我一个错误


Tags: 数据nametagsbluereditemqueryproducts
2条回答

我们可以这样做的一种方法是从products表中创建一个字典,将item_name列作为key,item_tags列作为value,然后map将其添加到orders item列中:

products_dict = dict(zip(products.item_name,products.item_tags))
orders['item_tags'] = orders['item'].map(products_dict)

输出

orders
Out[83]: 
         item           item_tags
0  blue_shirt  summer,winter,blue
1   red_skirt       spring,summer

另一种方法是使用merge函数

pd.merge(df_orders, df_products, left_on='item', right_on='item_name').drop(['item_name'], axis = 1)

通过使用merge方法,可以传递productsorders数据集,并为join操作指定列

import pandas as pd
df_products = pd.DataFrame(data={'item_name': ['blue_shirt', 'red_skirt'], 'item_tags': ['summer,winter,blue','spring,summer']})
df_orders = pd.DataFrame(data={'item': ['blue_shirt','red_skirt']})
df_orders = pd.merge(df_orders, df_products, left_on='item', right_on='item_name').drop(['item_name'], axis = 1)
print(df_orders)

输出

   item           item_tags
0  blue_shirt  summer,winter,blue
1  red_skirt       spring,summer

相关问题 更多 >