Pandas 线性模式下的展开度

Pandas 线性模式下的展开度,pandas,numpy,Pandas,Numpy,我有一个熊猫数据帧,x为时间,y为度(蓝线)。 我想打开角度,第一个360度是360度,第二个360度是720度,第三个360度是1080度,依此类推(橙色线) 我可以使用for循环和if条件来实现这一点,但我正在寻找一个优雅的解决方案,这样我就可以在pandas数据框中将这些未包装的数据作为一个新列 注:t不是等采样的我制作了一些原始数据来说明如何进行 import pandas as pd df = pd.DataFrame({'deg_wrapped': [10,80,150,220,

我有一个熊猫数据帧,x为时间,y为度(蓝线)。

我想打开角度,第一个360度是360度,第二个360度是720度,第三个360度是1080度,依此类推(橙色线)

我可以使用for循环和if条件来实现这一点,但我正在寻找一个优雅的解决方案,这样我就可以在pandas数据框中将这些未包装的数据作为一个新列


注:t不是等采样的

我制作了一些原始数据来说明如何进行

import pandas as pd

df = pd.DataFrame({'deg_wrapped': [10,80,150,220,300,20,90,170,240,300,360,50,150,220,290]})
# get row to row differences, fill NA at start with first degree value
df['diffs'] = df.deg_wrapped.diff().fillna(df.deg_wrapped) 
# unwrap at jump points, assuming monotonic data
df.loc[df.diffs < 0, 'diffs'] = 360 - df.deg_wrapped.shift(1) + df.deg_wrapped
df['deg_unwrapped'] = df.diffs.cumsum()
将熊猫作为pd导入
df=pd.数据帧({'deg_wrapped':[10,80150220300,20,90170240300360,5015020290]})
#获取行与行之间的差异,在开始处用一阶值填充NA
df['diffs']=df.deg_-wrapped.diff().fillna(df.deg_-wrapped)
#假设数据单调,在跳跃点展开
测向位置[df.diffs<0,'diffs']=360-测向度包裹。移位(1)+测向度包裹
df['deg_unwrapped']=df.diff.cumsum()
屈服

    deg_wrapped  diffs  deg_unwrapped
0            10   10.0           10.0
1            80   70.0           80.0
2           150   70.0          150.0
3           220   70.0          220.0
4           300   80.0          300.0
5            20   80.0          380.0   <--- jump point
6            90   70.0          450.0
7           170   80.0          530.0
8           240   70.0          600.0
9           300   60.0          660.0
10          360   60.0          720.0
11           50   50.0          770.0   <--- jump point
12          150  100.0          870.0
13          220   70.0          940.0
14          290   70.0         1010.0
deg_包裹diff deg_展开
0            10   10.0           10.0
1            80   70.0           80.0
2           150   70.0          150.0
3           220   70.0          220.0
4           300   80.0          300.0
5            20   80.0          380.0