qua*_*ant 7 python numpy pandas
假设我有一个名为的时间序列X。
我现在想知道第一个索引,之后其他数列的值Y将通过X。换句话说,对每一个指标i,我想知道的第一指标j 之后,它通过形成的线X从j-1到j相交的价值Y在i。
下面是一个例子组示例X,Y系列,显示了所得到的值Z。这些系列的长度始终相同:
X | Y | Z
2 | 3 | 2
2 | 3 | NaN
4 | 4.5 | 3
5 | 5 | NaN
4 | 5 | NaN
3 | 2 | 6
1 | 2 | NaN
Run Code Online (Sandbox Code Playgroud)
是否提供pandas或numpy提供有助于此的东西?此函数将在大型数据集上运行,因此我无法使用python循环。
使用numpy broadcastingby 与shifted值进行比较,然后通过小幅改进获取第一个Trues by的索引 - 添加列以获取每行的所有值,最后删除重复值:DataFrame.idxmaxNaNNaNFalse
a = df['X']
b = df['Y']
a1 = a.values
a2 = a.shift(-1).ffill().values
b1 = b.values[:, None]
arr = (((a1 < b1) & (a2 > b1)) | ((a1 > b1) & (a2 < b1)))
df = pd.DataFrame(arr)
df[np.nan] = True
out = df.idxmax(axis=1) + 1
out = out.mask(out.duplicated())
print (out)
0 2.0
1 NaN
2 3.0
3 NaN
4 NaN
5 6.0
6 NaN
dtype: float64
Run Code Online (Sandbox Code Playgroud)