根据 Python 中的嵌套列表从数据框中获取值

Get values from a dataframe based on a nested list in Python

我在 Python 中有一个名为“Item_Table”的数据框,如下所示:

--------------------------
item_id | item_description
--------------------------
N4      | Steel
M3      | Oil
B1      | Water
X9      | Coal
Z5      | Plastic
--------------------------

我还有一个嵌套的订单列表,如下所示。嵌套列表中的每个列表代表一个订单。一个订单可以有多个项目

orders = [[Z5], [X9, Z5], [B1, Z5, N4], [B1, X9]]

理想情况下,我想 return 一个嵌套列表,其中包含来自“Item_Table”的相应 item_descriptions,看起来像下面的嵌套列表:

orders_descriptions = [[Plastic], [Coal, Plastic], [Water, Plastic, Steel], [Water, Coal]]

我尝试了一种解决方案,我将订单列表转换为数据框并尝试将其与 item_table 合并以获得 item_descriptions 但是因为一个订单有多个项目,所以我无法进行连接.

您可以尝试将 item_iditem_description 导出到字典,然后循环 orders

d = df.set_index('item_id')['item_description'].to_dict()

orders_descriptions = [[d[o] for o in os] for os in orders]
print(orders_descriptions)

[['Plastic'], ['Coal', 'Plastic'], ['Water', 'Plastic', 'Steel'], ['Water', 'Coal']]

这是暴力查找方法,但我认为“导出到字典”的想法是一个更好的概念。

import pandas as pd
data = [
    ['N4','Steel'],
    ['M3','Oil'],
    ['B1','Water'],
    ['X9','Coal'],
    ['Z5','Plastic']
]
df = pd.DataFrame(data, columns=('item_id','item_description'))
print(df)

orders = [['Z5'], ['X9','Z5'], ['B1', 'Z5', 'N4'], ['B1', 'X9']]

orders_descriptions = []
for order in orders:
    orders_descriptions.append( [df[df['item_id'].eq(o)]['item_description'].iloc[0] for o in order] )

print(orders_descriptions)

这是一个略有不同的答案(对于大型数据帧它可能更快,但仍有待检查)仍然使用 pandas 索引,但它不循环遍历字典。

item_frame.set_index("item_id", inplace=True)
order_descriptions = [item_frame.loc[o]["item_description"].tolist() for o in orders]

如果您想创建一个单列订单数据框:

pd.DataFrame({"order_descriptions": order_descriptions})