所以在R中,我会使用一个优化的apply函数,但是我已经读到Panda的apply函数是一个抽象的循环,甚至可能比一个循环慢,它在性能上表现出来了。在我的机器上,处理6万行需要30分钟。你知道吗
所以本质上,我希望计算一个移动平均值,基于一个数据集,不同的组,我需要计算移动平均值。有很多这样的团体。因此,我首先必须在行/单元格的基础上对数据集进行子集划分,然后才计算移动平均值。你知道吗
因此,我试图提出一个矢量化的解决方案,但似乎无法理解如何在矢量化方法中对数据帧进行子集设置。你知道吗
我目前的解决方案使用了一个非常容易理解和维护的apply函数:
df['SMA'] = df.apply(SMA, axis=1)
def SMA(row):
Subset = df[(df['group']==row['group'])&(df['t']<=row['t'])].reset_index()
Subset2 = Subset[len(Subset.index)-(2):len(Subset.index)]
return df['val'].mean()
这是我的预期输出(我目前正在获得,但速度非常慢):
这是数据帧,这个例子我想要两个时间点上的移动平均值,这个例子中的“t”:
t group val moving average
1 A 1 NA
2 A 2 1.5
3 A 3 2.5
1 B 4 NA
2 B 5 4.5
3 B 6 5.5
1 C 7 NA
2 C 8 7.5
3 C 9 8.5
{pandas}在cd1操作中被处理为组。如果我们注意将索引设置为time,那么它还可以处理返回time索引的正确输出。你知道吗
下面是一个与您的代码基本相同的示例:
moving_avg
现在是一个新的数据帧。请注意,因为我在第一部分中将索引设置为t
,所以在分组和滚动平均中它得到了正确的处理:相关问题 更多 >
编程相关推荐