[英]pandas | get data from another dataframe based on condition
I have two dataframes:我有两个数据框:
products
+------------+--------------------+
| item_name | item_tags |
+------------+--------------------+
| blue_shirt | summer,winter,blue |
| | |
+------------+--------------------+
| red_skirt | spring,summer |
+------------+--------------------+
and orders
和orders
+------------+
| item |
+------------+
| blue_shirt |
+------------+
| red_skirt |
+------------+
and I want to create a new column in orders
: when products.item_name
== orders.item
, I want to take the value of products.item_tags
and add it to orders.我想在orders
中创建一个新列:当products.item_name
== orders.item
时,我想获取products.item_tags
的值并将其添加到订单中。
I've tried:我试过了:
orders['ItemTags'] = products.query("{0}=={1}".format(orders['item'], products['item_name']))['Tags']
But it gives me an error.但这给了我一个错误。
One way we can do this is with creating a dictionary from your products table, with your item_name column as your key
and your item_tags column as your value
, and then map
it onto your orders item column:我们可以做到这一点的一种方法是从您的 products 表中创建一个字典,您的 item_name 列作为您的key
,您的 item_tags 列作为您的value
,然后将map
放到您的 orders 项目列中:
products_dict = dict(zip(products.item_name,products.item_tags))
orders['item_tags'] = orders['item'].map(products_dict)
Output Output
orders
Out[83]:
item item_tags
0 blue_shirt summer,winter,blue
1 red_skirt spring,summer
Another approach could be using of the merge
function.另一种方法可能是使用merge
function。
pd.merge(df_orders, df_products, left_on='item', right_on='item_name').drop(['item_name'], axis = 1)
By using merge
method you can pass the both products
and orders
datasets and specify the column(s) for the join
operations.通过使用merge
方法,您可以传递products
和orders
数据集,并为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)
Output Output
item item_tags
0 blue_shirt summer,winter,blue
1 red_skirt spring,summer
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.