为了账号安全,请及时绑定邮箱和手机立即绑定

pandas resample dropna 不适用于所有列

pandas resample dropna 不适用于所有列

慕虎7371278 2021-11-09 16:59:29
重新采样时DataFrame,dropna()似乎按列工作,这会使测量不准确。对于以下数据:In [1]: np.random.seed(117)In [2]: data = pd.DataFrame(   ...:     np.concatenate((np.random.rand(17), np.full(3, np.nan))).reshape(2, 10).transpose(),   ...:     index=pd.bdate_range(start='2019-02-04', end='2019-02-15'),   ...:     columns=['t1', 't2'],   ...: ).mul(.01).add(1).cumprod().mul(100)In [3]: dataOut[3]:               t1     t22019-02-04 100.45 100.682019-02-05 100.75 101.652019-02-06 100.98 102.482019-02-07 101.88 103.402019-02-08 102.07 104.172019-02-11 103.02 104.932019-02-12 103.07 105.092019-02-13 103.85    NaN2019-02-14 103.94    NaN2019-02-15 104.09    NaN如果我们重新采样每周累积回报的数据,我们希望删除2019-02-13第二个时期之后的日期 - 因为该列t2在该日期之后没有数据。但 的累计回报t1是基于整个期间的1.03:In [4]: data.resample('7D').apply(lambda vv: vv.dropna().pct_change().sum()).mul(100)Out[4]:             t1   t22019-02-04 1.60 3.432019-02-11 1.03 0.15问题的原因是 - 分别dropna()适用于每一列。这会在重采样结果中引入无效数据点。是否有一种 pythonic 方法只在2019-02-11and期间使用数据2019-02-12,即所需的输出应该是:In [5]: ???Out[5]:             t1   t22019-02-04 1.60 3.432019-02-11 0.05 0.15
查看完整描述

1 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

您可以nan在重新采样数据之前删除:


data.loc[data.isna().sum(axis=1) == 0, :].resample('7D').apply(lambda vv: vv.pct_change().sum()).mul(100)

结果如下所示:


                  t1        t2

date                          

2019-02-04  1.604703  3.422393

2019-02-11  0.048534  0.152483


查看完整回答
反对 回复 2021-11-09
  • 1 回答
  • 0 关注
  • 215 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信