python - 根据单独列中行总和的结果返回值
问题描述
我正在尝试创建一个新列(D 列),CLOSE
如果在接下来的 5 行(以上)中的任何时候SELL
(即 452.37)时值的变化达到5%
较低的值,则该列返回一个值。(即452.37 / 1.05 = 432.85
)确实发生在第 5 行。
我的数据框如下,D行是我想要的样子
df = pd.DataFrame()
df['A'] = ('1/05/2019','2/05/2019','3/05/2019','4/05/2019','5/05/2019',
'6/05/2019','7/05/2019','8/05/2019','9/05/2019','10/05/2019')
df['B'] = (460.97, 454.50, 439.00, 438.04, 433.00,
428.01, 440.00, 437.69, 452.37, 455.93)
df['C'] = ('-', '-', '-', '-', '-', '-', '-', '-', 'SELL', '-')
df['D'] = ('-', '-', '-', '-', '-', 'CLOSE', '-', '-', '-', '-')
print(df)
解决方案
根据给出的描述,您似乎可以结合 shift B
,计算滚动最大值,并将此滚动最大值与 的“当前”值进行比较B
:
df['D2'] = np.where((pd.Series(np.where(df['C'] == 'SELL',
df['B'],
0)).shift(-5).rolling(5, min_periods=1).max() / df['B']) > 1.05,
'CLOSE',
'-')
print(df)
返回
A B C D D2
0 1/05/2019 460.97 - - -
1 2/05/2019 454.50 - - -
2 3/05/2019 439.00 - - -
3 4/05/2019 438.04 - - -
4 5/05/2019 433.00 - - -
5 6/05/2019 428.01 - CLOSE CLOSE
6 7/05/2019 440.00 - - -
7 8/05/2019 437.69 - - -
8 9/05/2019 452.37 SELL - -
9 10/05/2019 455.93 - - -
推荐阅读
- amazon-web-services - 如何为 lambda/dynamo 创建 cloudformation cloudwatch 警报?
- python - 根据两列之间的关系创建新键
- python - 在两个列表 Python 中计数 0 个元素
- python - 根据特定值删除 CSV 中的行
- arrays - 为什么我得到浮点异常?
- pandas - 在openpyxl中识别一个没有文本但有超链接的单元格?
- flutter - Flutter Camera for Android 会在一段时间后抛出异常
- html - 锚标签中的 maito 命令不再起作用
- java - Spirng 在从纯 spring 迁移到 springboot 后无法创建 jee:jndi-lookup bean
- python - 如何将单行与它自己的索引与未堆叠的多索引数据框结合起来?