首页 > 解决方案 > 删除以另一列的大值为条件的值

问题描述

我有一个时间序列 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()。

标签: pythonpandasloopstime-series

解决方案


您还可以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


推荐阅读