Python 在数据框内按日期对列的平均值进行矢量化
我正在为“avgPrice”列创建每个不同日期的平均值。数据是一个面板,其中包含不同“typeID”的以下列。如果只显示typeID 18,则整个数据集中有59个typeID。数据示例如下所示: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
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()
,这就是重点,您需要重新分配它。