Python 计算具有公共id(而不是列)的多行中的平均值或通过切片计算平均值时出现问题

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 这是表的外观-正如您所看到的,

我有一个数据框,其中包含来自餐厅的订单、订单ID和订单中每个项目的价格。一行是产品名称及其价格和订单id。我想计算所有订单的平均值,但因此订单可能由多个产品组成,它们位于单独的行中

我试图在python中定义什么是顺序,但由于我是新手,所以没有成功

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()