很抱歉,如果标题令人困惑,我会尽力解释这个问题。我这里有一个示例数据集: Ex.1
Segment Reach OutSeg Elevation
1 1 3 50
1 2 3 74
1 3 3 87
1 4 3 53
1 5 3 97
2 1 3 16
2 2 3 14
2 3 3 31
2 4 3 35
2 5 3 27
3 1 4 193
3 2 4 176
3 3 4 158
3 4 4 154
4 1 6 21
4 2 6 45
4 3 6 42
4 4 6 22
4 5 6 22
5 1 6 10
5 2 6 21
5 3 6 14
5 4 6 16
但是,我想按照其到达的顺序计算每个段编号的高程的移动平均值(窗口为3),如果段有一个OutSeg值,我希望每个段末尾的移动平均值使用其参考段(OutSeg)开始处的高程值。例如,在第1段达到5(1,5)时,我希望移动平均值考虑(1,4)、(1,5)和(3,1)处的值
我相信可能需要某种形式的for循环……我尝试了以下代码,但它只计算各组内的移动平均数:
df[“moving”]=df.groupby(“Segment”)[“Elevation”].transform(lambda x:x.rolling(3,1)df["moving"] = df.groupby("Segment")["Elevation"].transform(lambda x: x.rolling(3,1)
提前谢谢
我无法想象一种完全矢量化的方式,因此我将使用groupby on
Segment
应用特定函数。该函数将从OutSeg
子数据帧中添加第一行(如果有),计算滚动平均值并仅返回原始行代码可以是:
它给出:
相关问题 更多 >
编程相关推荐