通过调整另一列中的最大值来调整pandas数据帧中的连续行

时间:2018-02-07 22:01:33

标签: python pandas physics pandas-groupby numerical-integration

我有一个大熊猫数据框,该时间序列包含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')
)

非常感谢任何帮助。还有更多信息请询问!

1 个答案:

答案 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