python - 如何在熊猫中使用带移位功能的最小值/最大值?
问题描述
我有时间序列数据(欧元/美元)。我想创建具有条件的新列
(在我的代码中更容易阅读以了解条件。)如果至少 3 个先前的高价小于或等于当前价格,那么它将是“BUY_SIGNAL”,如果最多 3 个先前的低价高于或等于当前价格,那么它将是“SELL_SIGNAL”。
这是我的桌子看起来像
DATE OPEN HIGH LOW CLOSE
0 1990.09.28 1.25260 1.25430 1.24680 1.24890
1 1990.10.01 1.25170 1.26500 1.25170 1.25480
2 1990.10.02 1.25520 1.26390 1.25240 1.26330
3 1990.10.03 1.26350 1.27000 1.26030 1.26840
4 1990.10.04 1.26810 1.27750 1.26710 1.27590
这是我的代码(我尝试创建 2 个函数但它不起作用)
def target_label(df):
if df['HIGH']>=[df['HIGH'].shift(1),df['HIGH'].shift(2),df['HIGH'].shift(3)].min(axis=1):
return 'BUY_SIGNAL'
if df['LOW']>=[df['LOW'].shift(1),df['LOW'].shift(2),df['LOW'].shift(3)].min(axis=1):
return 'SELL_SIGNAL'
else:
return 'NO_SIGNAL'
def target_label(df):
if df['HIGH']>=df[['HIGH1','HIGH2','HIGH3'].min(axis=1):
return 'BUY_SIGNAL'
if df['LOW']<=df[['LOW1','LOW2','LOW3']].max(axis=1):
return 'SELL_SIGNAL'
else:
return 'NO_SIGNAL'
d_df.apply (lambda df: target_label(df), axis=1)
解决方案
您可以使用rolling(3).min()
获取前 3 行的最小值。这同样适用于其他功能,如max
,mean
等。如下所示:
df['signal'] = np.where(
df['HIGH'] >= df.shift(1).rolling(3)['HIGH'].min(), 'BUY_SIGNAL',
np.where(
df['LOW'] >= df.shift(1).rolling(3)['LOW'].min(), 'SELL_SIGNAL',
'NO_SIGNAL'
)
)
推荐阅读
- pandas - 按系列划分 Pandas Dataframe - 为什么它有效?
- python - 最小化径向图中的交叉点(networkx,graphviz)
- android - 如何合并 3 个或更多不同泛型的 LiveData 源?
- jenkins - $Variable 未在 Jenkinsfile 的库定义中扩展
- python - 导入不和谐 ModuleNotFoundError:没有名为“不和谐”的模块
- typescript - 创建具有返回实例的方法的抽象类 this
- javascript - React-Native:无法将状态中数组的大小设置为状态中另一个数组的大小
- c - 无法弄清楚我在使用数组时做错了什么——警告我是新手并且正在学习
- c++ - C++ 类继承和成员函数
- python - 熊猫 to_mardown() 突出显示行