<pre><code>>>> import pandas as pd
>>> import numpy as np
>>> import string
</code></pre>
<p>让我们创建一些数据:</p>
^{pr2}$
<p>接下来,我们将每个字母与相应的移动平均值(MA)和信号列配对:</p>
<pre><code>>>> columns = [(letter, letter + '_MA', 'signal' + str(ord(letter)-65)) for letter in string.ascii_uppercase]
>>> columns
[('A', 'A_MA', 'signal0'), ('B', 'B_MA', 'signal1'), ('C', 'C_MA', 'signal2'), ('D', 'D_MA', 'signal3'), ('E', 'E_MA', 'signal4'), ('F', 'F_MA', 'signal5'), ('G', 'G_MA', 'signal6'), ('H', 'H_MA', 'signal7'), ('I', 'I_MA', 'signal8'), ('J', 'J_MA', 'signal9'), ('K', 'K_MA', 'signal10'), ('L', 'L_MA', 'signal11'), ('M', 'M_MA', 'signal12'), ('N', 'N_MA', 'signal13'), ('O', 'O_MA', 'signal14'), ('P', 'P_MA', 'signal15'), ('Q', 'Q_MA', 'signal16'), ('R', 'R_MA', 'signal17'), ('S', 'S_MA', 'signal18'), ('T', 'T_MA', 'signal19'), ('U', 'U_MA', 'signal20'), ('V', 'V_MA', 'signal21'), ('W', 'W_MA', 'signal22'), ('X', 'X_MA', 'signal23'), ('Y', 'Y_MA', 'signal24'), ('Z', 'Z_MA', 'signal25')]
</code></pre>
<p>对于每个正则时间序列及其移动平均值,以及相应的<code>signal</code>列,如果正则时间序列大于移动平均值,则分配-1,否则分配1。在</p>
<pre><code>>>> for ts, ma, signal in columns:
... df[signal] = np.where(df[ts] > df[ma], -1, 1)
...
>>> df.head()
A A_MA B B_MA C C_MA D \
0 0.194264 1.026269 -0.754151 -0.156895 1.583709 -0.018520 0.895973
1 -0.105569 -0.380830 -1.464730 -2.057322 -0.448863 -0.270909 -1.011525
2 1.306095 0.003583 -0.714843 0.132892 -0.162723 0.494365 -0.702625
3 0.194403 -0.828941 0.472967 1.218849 -0.092833 1.639822 -1.953157
4 -0.680198 0.078923 0.939365 -0.267072 0.275587 2.262286 -0.196426
D_MA E E_MA ... signal16 signal17 signal18 \
0 -0.185024 0.803631 -0.415856 ... -1 1 -1
1 -0.784399 -0.758771 0.531884 ... 1 1 -1
2 0.476952 -0.160694 1.397329 ... -1 1 -1
3 1.755312 -0.191594 -0.701020 ... 1 1 -1
4 0.195957 1.222551 1.071865 ... 1 -1 1
signal19 signal20 signal21 signal22 signal23 signal24 signal25
0 -1 -1 1 -1 1 1 1
1 1 1 1 1 -1 -1 -1
2 -1 -1 1 -1 -1 1 -1
3 -1 -1 -1 -1 -1 -1 1
4 1 -1 1 1 1 1 -1
[5 rows x 78 columns]
</code></pre>
<p>下面我们仔细看看:</p>
<pre><code>>>> df[list(columns[0]) + list(columns[1])].head()
A A_MA signal0 B B_MA signal1
0 0.194264 1.026269 1 -0.754151 -0.156895 1
1 -0.105569 -0.380830 -1 -1.464730 -2.057322 -1
2 1.306095 0.003583 -1 -0.714843 0.132892 1
3 0.194403 -0.828941 -1 0.472967 1.218849 1
4 -0.680198 0.078923 1 0.939365 -0.267072 -1
</code></pre>
<p>例如,对于给定的行,<code>A</code>等于<code>A_MA</code>(在您的方法中,只需使用<code>></code>和{<cd5>}而不使用<code><=</code>或{<cd7>}将潜在的行排除在外。在</p>