Python 熊猫:如何根据后续行添加具有值的列
我有以下数据框Python 熊猫:如何根据后续行添加具有值的列,python,pandas,Python,Pandas,我有以下数据框 timestamp close open high low volume datetime candlestick_pattern candlestick_match_count SYMBOL 0 510037200 0.095486 0.088542 0.103299 0.088542 1857052800 1986-03-01 05:00:00 NO_PATTERN 0.0 MSFT 1 512715600
timestamp close open high low volume datetime candlestick_pattern candlestick_match_count SYMBOL
0 510037200 0.095486 0.088542 0.103299 0.088542 1857052800 1986-03-01 05:00:00 NO_PATTERN 0.0 MSFT
1 512715600 0.111979 0.095486 0.121962 0.092882 547142400 1986-04-01 05:00:00 NO_PATTERN 0.0 MSFT
2 515304000 0.121528 0.111979 0.123264 0.107639 333446400 1986-05-01 04:00:00 NO_PATTERN 0.0 MSFT
3 517982400 0.106771 0.121528 0.121528 0.102431 293788800 1986-06-01 04:00:00 NO_PATTERN 0.0 MSFT
4 520574400 0.098958 0.106771 0.109375 0.090278 460800000 1986-07-01 04:00:00 NO_PATTERN 0.0 MSFT
5 523252800 0.098958 0.098958 0.106771 0.094618 266256000 1986-08-01 04:00:00 NO_PATTERN 0.0 MSFT
6 525931200 0.098090 0.098958 0.109375 0.091146 285120000 1986-09-01 04:00:00 NO_PATTERN 0.0 MSFT
7 528523200 0.134549 0.098090 0.139757 0.095486 1565712000 1986-10-01 04:00:00 NO_PATTERN 0.0 MSFT
8 531205200 0.172743 0.135417 0.177951 0.135417 1053964800 1986-11-01 05:00:00 NO_PATTERN 0.0 MSFT
9 533797200 0.167535 0.172743 0.173611 0.157118 721526400 1986-12-01 05:00:00 NO_PATTERN 0.0 MSFT
10 536475600 0.253906 0.167535 0.269097 0.164931 1961596800 1987-01-01 05:00:00 CDLHIKKAKE_Bear 1.0 MSFT
11 539154000 0.266493 0.253906 0.276042 0.230903 1834272000 1987-02-01 05:00:00 NO_PATTERN 0.0 MSFT
12 541573200 0.335938 0.266493 0.343750 0.255208 1783324800 1987-03-01 05:00:00 NO_PATTERN 0.0 MSFT
13 544251600 0.361111 0.335938 0.378472 0.314236 2118585600 1987-04-01 05:00:00 NO_PATTERN 0.0 MSFT
14 546840000 0.400174 0.361111 0.445312 0.356771 2192054400 1987-05-01 04:00:00 CDLBELTHOLD_Bull 1.0 MSFT
15 549518400 0.354167 0.400174 0.400174 0.334201 1729353600 1987-06-01 04:00:00 CDLBELTHOLD_Bear 1.0 MSFT
16 552110400 0.326389 0.353299 0.367188 0.307292 1813536000 1987-07-01 04:00:00 NO_PATTERN 0.0 MSFT
17 554788800 0.412326 0.326389 0.421007 0.316840 2034921600 1987-08-01 04:00:00 CDLMORNINGSTAR_Bull 2.0 MSFT
18 557467200 0.460069 0.409722 0.462674 0.368056 1554902400 1987-09-01 04:00:00 CDLCLOSINGMARUBOZU_Bull 1.0 MSFT
19 560059200 0.345486 0.460069 0.550347 0.258681 3567219200 1987-10-01 04:00:00 NO_PATTERN 0.0 MSFT
20 562741200 0.310764 0.342014 0.361111 0.281250 1550172800 1987-11-01 05:00:00 NO_PATTERN 0.0 MSFT
21 565333200 0.376736 0.309028 0.388889 0.277778 1780182400 1987-12-01 05:00:00 CDLENGULFING_Bull 1.0 MSFT
22 568011600 0.387153 0.380208 0.428819 0.364583 1966780800 1988-01-01 05:00:00 CDL3OUTSIDE_Bull 7.0 MSFT
我需要添加两列:
在接下来的3行中增加了5%。
这应该是0或1,取决于接下来3行的CLOSE列是否增加了5%。代码应该只适用于包含“BULL”单词的模式的行
第二列应该是在接下来的3行中增加的实际百分比
显然,这不可能计算pandas数据帧的最后3行,因此代码需要处理这个问题
更新:
解决方案中最重要的是使用:
向前看3天.shift(-3)
- 与
.groupby('SYMBOL')['close'].transform()结合使用,在数据帧中的每一行的相同库存组中执行此操作
.groupby().transform()上的文档:
#获取子集只是为了更好地了解正在发生的事情
#排序对于以后的计算很重要
df_子集=df[
['SYMBOL','datetime',
“关闭”、“烛台图案”]
].sort_值(按=['SYMBOL','datetime'])
#检查符号组中的未来值。使用shift(-3)向前看3。
df_子集['shift_3_rows_ahead']=(df_子集
.groupby('SYMBOL')['close']
.transform(lambda x:x.shift(-3)))
#计算增长百分比
df_子集['perc_increase']=(
(df_子集['shift_3_rows_ahead']
/df_子集['close']-1)*100)
#检查百分比增加是否大于5%
df_子集[‘增加_大于_百分之五]]=df_子集[‘百分比增加’]>5。
#检查相关列是否包含单词bull
df_子集['contains_bull']=df_子集['candlestick_pattern'].str.contains('bull',case=False)
#检查列是否包含牛市,以及未来增长是否大于5%
df_子集[“应该看”]=(
df_子集['contains_bull']
&df_子集[‘增加_大于_百分之五’]
)
Hi Luis,当你说在接下来的3行中增加了5%时,你的意思是这3行中的任何一行都应该增加5%吗?或者当前的第3行应该高出5%?其他问题:我想你想要每支股票的价格?或者您的数据帧中只有一个库存?你能用这些信息更新这个问题吗?只是编辑一下,我希望它更清楚