我有一个大熊猫数据框,该时间序列包含GPS纬度和加速度列,用于围绕地球轨道运行的卫星。该纬度在最大值和最小值之间振荡,具有预期的恒定时间段。我想要做的是在每个轨道周期内集成加速度列。
我知道我需要使用熊猫' groupby'每个时期分组的方法。但是,我无法弄清楚如何将连续的行分组到轨道周期(比如迭代它并分组,直到我达到最大纬度值,从而定义轨道的终点?)。分组后,我可以在每个时期应用数值积分。
下面给出了生成类似DataFrame的示例代码。
from scipy import signal
t = np.linspace(0, 1, 500)
np.random.seed(0) # make sure we will get the same values every time
df = pd.DataFrame(
{'Lat': signal.sawtooth(2 *np.pi * 5 * t, 0.5),
'Acc': np.random.rand(500)},
index=pd.date_range('1/1/2011 00:00:00.006392', periods=500, freq='10ms')
)
非常感谢任何帮助。还有更多信息请询问!
答案 0 :(得分:0)
IIUC这是一个小型演示:
In [280]: d = pd.DataFrame({'Lat':[1,3,4,2,0,1,2,3], 'Acc':np.random.randint(0,4,8)})
In [281]: d
Out[281]:
Acc Lat
0 3 1
1 1 3
2 2 4
3 3 2
4 2 0
5 2 1
6 2 2
7 2 3
In [282]: d.groupby(np.sign(d.Lat.diff().bfill(0)).diff().fillna(0).ne(0).cumsum())['Acc'].sum()
Out[282]:
Lat
0 6
1 5
2 6
Name: Acc, dtype: int32
详细说明:
In [288]: d.Lat.diff().bfill(0)
Out[288]:
0 2.0
1 2.0
2 1.0
3 -2.0
4 -2.0
5 1.0
6 1.0
7 1.0
Name: Lat, dtype: float64
In [289]: np.sign(d.Lat.diff().bfill(0))
Out[289]:
0 1.0
1 1.0
2 1.0
3 -1.0
4 -1.0
5 1.0
6 1.0
7 1.0
Name: Lat, dtype: float64
In [290]: np.sign(d.Lat.diff().bfill(0)).diff().fillna(0).ne(0)
Out[290]:
0 False
1 False
2 False
3 True
4 False
5 True
6 False
7 False
Name: Lat, dtype: bool
In [291]: np.sign(d.Lat.diff().bfill(0)).diff().fillna(0).ne(0).cumsum()
Out[291]:
0 0
1 0
2 0
3 1
4 1
5 2
6 2
7 2
Name: Lat, dtype: int32