python - 删除以另一列的大值为条件的值
问题描述
我有一个时间序列 df,由 A 列中的每日费率和 B 列中从一天到下一天的相对变化组成。
DF 看起来像下面这样:
IR Shift
May/24/2019 5.9% -
May/25/2019 6% 1.67%
May/26/2019 5.9% -1.67
May/27/2019 20.2% 292%
May/28/2019 20.5% 1.4%
May/29/2019 20% -1.6%
May/30/2019 5.1% -292%
May/31/2019 5.1% 0%
我想删除 A 列中发生在较大相对变化之间的所有值,> +/- 50%。
所以上面的 DF 应该如下所示:
IR Shift
May/24/2019 5.9% -
May/25/2019 6% 1.67%
May/26/2019 5.9% -1.67
May/27/2019 np.nan 292%
May/28/2019 np.nan 1.4%
May/29/2019 np.nan -1.6%
May/30/2019 5.1% -292%
May/31/2019 5.1% 0%
到目前为止,这就是我要去的地方......希望能得到一些帮助
for i, j in df1.iterrows():
if df1['Shift'][i] > .50 :
x = df1['IR'][i]
if df1['Shift'][j] < -.50 :
y = df1['IR'][j]
df1['IR'] = np.where(df1['Shift'].between(x,y), df1['Shift'],
np.nan)
Error ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
解决方案
您还可以np.where
从 numpy 运行,如下所示:
import pandas as pd
import numpy as np
df = pd.DataFrame({'Date':[datetime(2019,5,24), datetime(2019,5,25), datetime(2019,5,26), datetime(2019,5,27), datetime(2019,5,28),datetime(2019,5,29),datetime(2019,5,30)], 'IR':[0.059,0.06,0.059,0.202, 0.205, 0.2, 0.051], Shift':[pd.np.nan, 0.0167, -0.0167, 2.92, 0.014, -0.016, -2.92]})
df['IR'] = np.where(df['Shift'].between(df['Shift']*0.5, df['Shift']*1.5), df['Shift'], np.nan)
In [8]: df
Out[8]:
Date IR Shift
0 2019-05-24 NaN NaN
1 2019-05-25 0.0167 0.0167
2 2019-05-26 NaN -0.0167
3 2019-05-27 2.9200 2.9200
4 2019-05-28 0.0140 0.0140
5 2019-05-29 NaN -0.0160
6 2019-05-30 NaN -2.9200
推荐阅读
- android - Flutter 相机图像总是纵向的
- sql-server - 错误 - 使用 Apache Sqoop 和 Dataproc 从 SQL Server 导入 GCS
- reactjs - 警告:无法对未安装的组件执行 React 状态更新。(API 请求和更新状态)
- reactjs - 带有 typescript dnd 构造函数的 react-big-calendar 显示错误
- macos - AppleScript“Microsoft Outlook 出错:AppleEvent 处理程序失败。” 编号 -10000" Mac OS 大苏尔
- python-3.x - 在python中将utc转换为est时间
- python - Python返回与字典列表中特定键关联的值列表
- sql - 如何根据列值从表中获取数据并按其名称和计数列值分组
- python - 使用python解压缩gzip压缩字典对象
- jquery - 如何在 div 外部单击并隐藏,当我将它拖到外部时,它会一直隐藏(mouseup,mousedown ...)Jquery