python - 比较 Pandas 中的当前行和上一行
问题描述
我有一个股票数据框:
Open High Low Close Volume rb us \
0 1.20821 1.20821 1.20793 1.20794 138.96 0.022347 100.000000
1 1.20794 1.20795 1.20787 1.20788 119.61 0.004967 85.714286
2 1.20788 1.20793 1.20770 1.20779 210.42 0.007451 64.285714
3 1.20779 1.20791 1.20779 1.20789 77.51 0.008280 83.333333
4 1.20789 1.20795 1.20789 1.20792 56.97 0.002484 50.000000
ls color
0 96.428571 black
1 85.714286 black
2 50.000000 black
3 100.000000 white
4 100.000000 white
我想将当前行数据与前一行数据进行比较,如下所示:
if(df['color'] == df['color'].shift(-1)):
if((df['Close'] >= df['Open'].shift(-1) and df['Open']>=df['Close'].shift(-1)):
df['Position'] = UP
if((df['Close'] < df['Open'].shift(-1) and df['Open']<=df['Close'].shift(-1)):
df['Position'] = DOWN
如果条件还有很多...
无法通过以下方式比较数据
np.where(condition,TRUE,FALSE)
由于我的算法中有很多条件。这只是他们的一部分。
我该如何检查这些条件?
解决方案
你需要:
df['Position'] = np.where((df['Volume'] > df['Volume'].shift(-1)) & ((df['Close'] >= df['Close'].shift(-1)) & (df['Open'] <= df['Open'])),"UP","DOWN")
输出:
Open High Low Close Volume Position
0 1.20821 1.20821 1.20793 1.20794 138.96 UP
1 1.20794 1.20795 1.20787 1.20788 119.61 DOWN
2 1.20788 1.20793 1.20770 1.20779 210.42 DOWN
3 1.20779 1.20791 1.20779 1.20789 77.51 DOWN
4 1.20789 1.20795 1.20789 1.20792 56.97 DOWN
推荐阅读
- html - 在 FireFox 中测试时箭头不兼容
- vue.js - 使用 Vuex 和 Vue-Router 进行简单的状态管理
- python - 单元测试模拟熊猫 to_csv
- recursion - 流程图 - 递归
- tensorflow - Tensorflow 的 TripletSemiHardLoss 和 TripletHardLoss 如何以及如何与 Siamese Network 一起使用?
- c# - 如何获取字符列表或列表中的特定字符
- vue.js - 存储获取的数据并在 Nuxtjs 中的组件中使用
- java - libGDX:如何仅截取整个相机场景而不是游戏场景?
- c++ - 如何将 const uint8_t [] 转换为 std::string?
- android - 没有导航控制器,抽屉布局不起作用