Python 在数据框内按日期对列的平均值进行矢量化

Python 在数据框内按日期对列的平均值进行矢量化,python,pandas,Python,Pandas,我正在为“avgPrice”列创建每个不同日期的平均值。数据是一个面板,其中包含不同“typeID”的以下列。如果只显示typeID 18,则整个数据集中有59个typeID。数据示例如下所示: typeID date lowPrice highPrice avgPrice volume orders 0 18 2003-10-01 14.0 14.0 14.0 284846 84 1 18 200

我正在为“avgPrice”列创建每个不同日期的平均值。数据是一个面板,其中包含不同“typeID”的以下列。如果只显示typeID 18,则整个数据集中有59个typeID。数据示例如下所示:

   typeID        date  lowPrice  highPrice  avgPrice  volume  orders
0      18  2003-10-01      14.0       14.0      14.0  284846      84
1      18  2003-10-02      14.0       16.0      15.0  533151      64
2      18  2003-10-03      15.0       15.0      15.0  247490      85
3      18  2003-10-04      15.0       15.0      15.0  367424     117
4      18  2003-10-05      14.0       14.0      14.0  923101     112
数据帧的长度为24574045,因此相当大。我想做的是创建一个聚合的avgPrice列,它获取每个日期的每个typeID的avgPrice的未加权平均值。以下代码可以工作,但执行速度非常慢:

dfm = pd.DataFrame()
total = len(set(df["date"])) # check execution time

for i, j in enumerate(set(df["date"])):
    if i % 10 == 0:
        print(i / total * 100) # check execution time
    dfm["date"] = j
    dfm["avgPrice"] = df.loc[df["date"] == j]["avgPrice"].mean()

这将返回一个新的数据帧,其中包含所有typeID上具有相应日期的avgPrice的未加权平均值。然而,考虑到手头数据的长度,这需要很长时间来执行。有没有什么方法可以加快这个过程,例如对for循环进行向量化?

df.groupby(['typeId',date']).avgPrice.mean()
?@coldspeed只返回原始数据帧的压缩版本,不幸的是,它没有将平均值“avgPrice”覆盖所有的“typeId”。这正是它应该做的。你能具体说明一下为什么这个“浓缩版”不是你想要的吗(又名,两栏的平均值,这正是你的帖子所要求的)?@coldspeed当我尝试运行您提供的代码时,它不会平均所有typeID上的avgPrice,并返回与原始数据帧长度相同的数据帧。请执行
df=df.groupby(['typeID',date'])。avgPrice.mean()
,这就是重点,您需要重新分配它。