Pandas 数据框根据其他 2 列的数据添加一列
Pandas data frame adding a column based on data from 2 other columns
我有一个数据框。一列称为分形。它有 0 或 1,其中 1 代表分形。这是 np.flatnonzero
的输出以了解分形的频率:
np.flatnonzero
[ 15 32 77 93 110 152 165 185 194 201 223 232 245 264 294 306 320 327
347 370 380 391 409 436 447 460 474 481 500 534 549 561 579 586 599 620
627 641 653 670 685 704 711 758 784]
还有一个高价列,df['high']
包含金融工具的每日最高价。
我想在数据库中添加一列,df['f_support']
包含与最后一个分形的高价相关的高价。
最高价在分形信号前 2 行。换句话说,该列将包含相同的最高价,直到出现另一个分形信号,然后新的高价将开始填充该列。
查看 np.flatzero
的输出,f_support
列应包含:
f_support
value
0–14
nothing
15–31
df['high'].iloc[13]
32–77
df['high'].iloc[30]
等等。
我希望我已经传达了这一点,所以它是有道理的。可能有一种简单的方法可以做到这一点,但这超出了我目前的范围。
IIUC:
fracloc = np.flatnonzero(df.fractal)
df.loc[df.index[fracloc], 'f_support'] = df['high'].iloc[fracloc - 2].to_numpy()
df['f_support'] = df['f_support'].pad()
df
fractal high f_support
0 0 74.961120 NaN
1 0 2.297611 NaN
2 0 60.294702 NaN
3 0 91.874424 NaN
4 0 69.327601 NaN
.. ... ... ...
73 0 34.925407 61.977998
74 0 64.475880 61.977998
75 0 86.939800 61.977998
76 0 42.377974 61.977998
77 1 42.725907 86.939800
我有一个数据框。一列称为分形。它有 0 或 1,其中 1 代表分形。这是 np.flatnonzero
的输出以了解分形的频率:
np.flatnonzero
[ 15 32 77 93 110 152 165 185 194 201 223 232 245 264 294 306 320 327
347 370 380 391 409 436 447 460 474 481 500 534 549 561 579 586 599 620
627 641 653 670 685 704 711 758 784]
还有一个高价列,df['high']
包含金融工具的每日最高价。
我想在数据库中添加一列,df['f_support']
包含与最后一个分形的高价相关的高价。
最高价在分形信号前 2 行。换句话说,该列将包含相同的最高价,直到出现另一个分形信号,然后新的高价将开始填充该列。
查看 np.flatzero
的输出,f_support
列应包含:
f_support | value |
---|---|
0–14 | nothing |
15–31 | df['high'].iloc[13] |
32–77 | df['high'].iloc[30] |
等等。
我希望我已经传达了这一点,所以它是有道理的。可能有一种简单的方法可以做到这一点,但这超出了我目前的范围。
IIUC:
fracloc = np.flatnonzero(df.fractal)
df.loc[df.index[fracloc], 'f_support'] = df['high'].iloc[fracloc - 2].to_numpy()
df['f_support'] = df['f_support'].pad()
df
fractal high f_support
0 0 74.961120 NaN
1 0 2.297611 NaN
2 0 60.294702 NaN
3 0 91.874424 NaN
4 0 69.327601 NaN
.. ... ... ...
73 0 34.925407 61.977998
74 0 64.475880 61.977998
75 0 86.939800 61.977998
76 0 42.377974 61.977998
77 1 42.725907 86.939800