python - Pandas - 如何比较一列的两个连续行
问题描述
我想找到一列的两个连续行的百分比差异,如果差异大于 10%,我想返回第一个值。例如,在下面的数据中,我想找到 df.close[0] 和 df.close[1] 之间的百分比差异,如果差异大于 10,那么我希望 df.close[0] 的值为df.close[1] 如果差值小于 10,那么我想为 df.close[0] 和 df.close[1] 保留相同的值,该怎么做=?
1. open 2. high 3. low 4. close 5. volume
date
2000-01-03 41.7917 42.5000 40.8333 41.2500 2006460.0
2000-01-04 41.0833 41.0833 38.2500 39.2917 3392856.0
2000-01-05 37.2083 37.2083 34.0000 34.5500 4344624.0
2000-01-06 34.5000 36.3333 34.5000 35.6708 2219904.0
2000-01-07 39.1667 43.2500 38.6667 43.2500 7155936.0
我尝试了以下代码,但似乎不起作用:
def percentage_diff(x):
if (abs((x[0]-x[1]/x[0])*100)>10):
return x[0]
else:
return x[1]
df.close = pd.rolling_apply(df['close'], 2, percentage_diff)
解决方案
通过使用以下功能,我能够解决问题。
def percentage_diff(x):
per = (abs((x[0] - x[1]))/x[1] *100)
if (per > 30):
return min(x[0], x[1])
else:
return x[0]
在我最初的问题中,如果百分比差异大于 10,我将返回 x[0] 或 x[1],这只是将值转移到下一行,并没有真正删除 anamoly
def percentage_diff(x):
if (abs((x[0]-x[1]/x[0])*100)>10):
return x[0]
else:
return x[1]
df.close = pd.rolling_apply(df['close'], 2, percentage_diff)
推荐阅读
- assembly - 汇编:Dword 到 Hex 转换问题
- amazon-web-services - 如何在 Electron JS 中从 Cognito OAuth2.0 动态获取 AccessToken
- python - 如何从熊猫数据农场中删除没有数据的列
- java - Intelij Java连接到mysql不起作用
- r - Append a character to a specific location in a column in a data frame
- python - 对 Flask ajax 的错误请求 Json
- c# - 向后移动时的Unity 3D移动问题
- flutter - 如何从颤动的android模拟器中获得黄色和黑色线条
- flutter - Flutter/Dart:将参数传递给有状态的小部件?
- python - 从 TensorFlow 张量中获取行