Python 计算具有公共id(而不是列)的多行中的平均值或通过切片计算平均值时出现问题
我有一个数据框,其中包含来自餐厅的订单、订单ID和订单中每个项目的价格。一行是产品名称及其价格和订单id。我想计算所有订单的平均值,但因此订单可能由多个产品组成,它们位于单独的行中 我试图在python中定义什么是顺序,但由于我是新手,所以没有成功Python 计算具有公共id(而不是列)的多行中的平均值或通过切片计算平均值时出现问题,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据框,其中包含来自餐厅的订单、订单ID和订单中每个项目的价格。一行是产品名称及其价格和订单id。我想计算所有订单的平均值,但因此订单可能由多个产品组成,它们位于单独的行中 我试图在python中定义什么是顺序,但由于我是新手,所以没有成功 for order in df: n = 1 order = df.order_id == n for order in orders: orders.median() n = n + 1 这是表的外观-正如您所看到的,
for order in df:
n = 1
order = df.order_id == n
for order in orders:
orders.median()
n = n + 1
这是表的外观-正如您所看到的,forst两个项目的订单id是相同的:
order_id quantity item_name choice_description item_price
0 1 1 Chips and Fresh Tomato Salsa NaN 2.39
1 1 1 Izze [Clementine] 3.39
我对语法有问题,我不知道如何用python语言表达它。你能帮忙吗
非常感谢 由于物品可能已订购多次,我将首先计算每个订单中所有相同物品的价格:
将熊猫作为pd导入
#模拟数据
df=pd.DataFrame({'order_id':[0,0,1,1],
“数量”:[1,2,1,3],
‘项目价格’:[2.39,9.99,3.39,19.99]})
df['price']=df.quantity*df.item\u价格
df
然后,您可以使用将每个订单的价格相加:
df_orders=df.groupby('order_id').sum()
DFU订单
最后计算新数据框中订单的平均价格:
dfu订单.价格.平均值()
正如我在评论中提到的那样,我使用了pandas groupby。我就是这样处理这个问题的: 首先,我将列的类型更改为numeric。它们是字符串,所以计算不起作用。为了计算订单的平均值()或中间值(),我决定在包含订单值的数据框中再添加一列。我将一份订单中每件商品的数量和价格相乘,以确保我考虑到某一产品的购买量更大
item_price = pd.to_numeric(data1['item_price'])
quantity = pd.to_numeric(data1['quantity'])
data1['order_value'] = quantity* item_price
[![The table after adding the new column][1]][1]
然后,我按照order_id对数据帧进行排序,并将每个项的值相加,以获得订单的总值
grouped = data1.groupby(['order_id']).sum()
quantity order_value
order_id
1 4 11.56
2 2 33.96
3 2 12.67
4 2 21.00
5 2 13.70
然后我对列order_值调用了mean()函数:
data1.order_value.mean()
欢迎来到堆栈溢出!为了使您的表更具可读性,我冒昧地做了一个测试,请检查它是否与您的实际数据相匹配。看起来您想要的是一个带有
.sum()
,然后是该输出的mean()
,但是如果您在基于给定输入的预期输出中包含一个,则会有所帮助。另请参见:我正在添加我的答案,就在您发布您的答案的同一时刻!非常感谢,这正是我设法做到的。非常感谢你!谢谢你的反馈@Joanna!是的,考虑到你在18小时前发布了这个问题,这个时间安排是出乎意料的。但很高兴能确认这确实是正确的答案,并且对你有效。请注意,对于其他人来说,像我上面所做的那样以可执行的形式包含一些示例数据是很有用的,这样代码就可以是自包含的。
item_price = pd.to_numeric(data1['item_price'])
quantity = pd.to_numeric(data1['quantity'])
data1['order_value'] = quantity* item_price
[![The table after adding the new column][1]][1]
grouped = data1.groupby(['order_id']).sum()
quantity order_value
order_id
1 4 11.56
2 2 33.96
3 2 12.67
4 2 21.00
5 2 13.70
data1.order_value.mean()