Pandas 熊猫-如何通过计算而不是迭代对组进行矢量化
这里有一个代码剪贴画来模拟我所面临的问题。我在大型数据集上使用迭代Pandas 熊猫-如何通过计算而不是迭代对组进行矢量化,pandas,Pandas,这里有一个代码剪贴画来模拟我所面临的问题。我在大型数据集上使用迭代 df = pd.DataFrame({'grp':np.random.choice([1,2,3,4,5],500),'col1':np.arange(0,500),'col2':np.random.randint(0,10,500),'col3':np.nan}) for index, row in df.iterrows(): #based on group label, get last 3 values to
df = pd.DataFrame({'grp':np.random.choice([1,2,3,4,5],500),'col1':np.arange(0,500),'col2':np.random.randint(0,10,500),'col3':np.nan})
for index, row in df.iterrows():
#based on group label, get last 3 values to calculate mean
d=df.iloc[0:index].groupby('grp')
try:
dgrp_sum=d.get_group(row.grp).col2.tail(3).mean()
except:
dgrp_sum=999
#after getting last 3 values of group with reference to current row reference, multiply by other rows
df.at[index,'col3']=dgrp_sum*row.col1*row.col2
如果我想用向量来加速它,我该如何转换这个代码?你基本上是计算每组的移动平均数。 这意味着您可以按“grp”对数据帧进行分组并计算滚动平均值。 最后,将每行中的列相乘,因为它不依赖于组
df[“col3”]=df.groupby(“grp”).col2.rolling(3,最小周期=1.mean().reset_索引(0,drop=True)
df[“col3”]=df[“col1”、“col2”、“col3”]]。产品(轴=1)
注意:在您的代码中,每个计算的平均值都放在下一行,这就是为什么您可能有这个try
块的原因
# Skipping last product gives only mean
# np.random.seed(1234)
# print(df[df["grp"] == 2])
grp col1 col2 iter mask
4 2 4 6 999.000000 6.000000
5 2 5 0 6.000000 3.000000
6 2 6 9 3.000000 5.000000
17 2 17 1 5.000000 3.333333
27 2 27 9 3.333333 6.333333
我可能把我的小飞贼简单化了。如果我试着用以前值的平均值来做一个简单的泊松分布呢?