【发布时间】:2020-01-31 12:54:13
【问题描述】:
我有一个包含订单列表order_items 及其总价order_price 的数据框。
order_type 列包含订单类型:早餐、午餐或晚餐。
我的目标是确认给定的总数 order_price 是正确的。通过将数量(元组中的第二个项目)乘以项目价格。然后将一个订单的所有价格相加并将其存储在一个新列中order_price_checked。
我的数据集示例:
order_id order_items order_type order_price
0 ORDB10489 [('Coffee', 4), ('Salad', 10), ('Chicken', 8), ('Steak', 10)] Lunch 1002.00
1 ORDZ00319 [('Fish&Chips', 9), ('Pasta', 5), ('Shrimp', 3)] Dinner 614.50
2 ORDB00980 [('Pasta', 6), ('Fish&Chips', 10)] Dinner 515.00
3 ORDY10003 [('Chicken', 7), ('Steak', 1)] Lunch 269.00
4 ORDK04121 [('Steak', 9), ('Chicken', 5)] Lunch 565.00
5 ORDC10404 [('Burger', 3), ('Salad', 6), ('Fries', 7)] Lunch 280.20
6 ORDK05183 [('Chicken', 1), ('Steak', 10), ('Fries', 4), ('Salad', 6)] Lunch 633.20
我已将每个 order_type 的价格存储在单独的字典中。
例如,lunchDict 用于午餐订单。
{'Burger': 31.0, 'Fries': 12.0, 'Chicken': 32.0, 'Salad': 17.2, 'Steak': 45.0}
我的方法是将元组中的第一项与字典键匹配。如果它与键匹配,那么我将元组中的第二项(数量)乘以相应键的值(价格)。
然后获取所有订单的总和并将其添加到新列order_price_checked。
期望的输出(我只显示两列以节省空间): 例如索引 1 和 4 显示我们的价格错误。
order_price order_price_checked
0 1002.00 1002.00
1 614.50 600.20
2 515.00 515.00
3 269.00 269.00
4 565.00 500.00
5 280.20 280.20
6 633.20 633.20
我尝试在for loop 中做到这一点:
for item in dirtyData['order_items']:
for mytuple in item:
if mytuple[0] in breakfastDict:
tot=mytuple[1]*breakfastDict[mytuple[0]]
print(tot)
但这不是一个明确的方法,我不知道我正在处理哪一行。 任何输入都会有所帮助。谢谢
【问题讨论】:
-
如果您提供午餐或晚餐的价格
dict可能会更好,因为您的样品不含早餐:P -
哦,是的!好吧..
标签: python pandas list dictionary