Pandasasfreq返回NaN如果确切的日期DNE

2024-10-01 02:20:48 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个pandas.Series,名为fin_series.中的财务数据

{CDA>看这里。在

In [565]: fin_series
Out[565]: 
Date
2008-05-16    1000.000000
2008-05-19    1001.651747
2008-05-20    1004.137434
...
2014-12-22    1158.085200
2014-12-23    1150.139126
2014-12-24    1148.934665
Name: Close, Length: 1665

我有兴趣看看数据的季度终点。不过,并非所有的金融交易日都正好在“本季度末”

例如:

^{pr2}$

我在这里完成了一个期望的功能。在

def bmg_qt_asfreq(series):
    ind = series[1:].index.quarter != series[:-1].index.quarter
    ind = numpy.append(ind, True)
    return tmp[ind]

这给了我:

In [15]: bmg_asfreq(tmp)
Out[15]: 
Date
2008-06-30     976.169425
2008-09-30     819.517607
2008-12-31     760.428770
... 
2011-09-30     963.252831
2011-12-30     999.742132
2012-03-30    1049.848583
...
2012-09-28    1086.689824
2012-12-31    1093.943357
2013-03-28    1117.111859
Name: Close, dtype: float64

请注意,我保留了“最近的先前价格”的日期,而不是简单地使用pandas.asfreq(freq = 'q', method = 'ffill'),因为原始Series.Index中存在的日期的保存是至关重要的。

这似乎是一个很多人都遇到过的愚蠢问题,必须通过所有的pandas时间操作功能来解决,但是我不知道如何使用resample或{}来解决

任何能向我展示内置的pandas功能来完成这一点的人将不胜感激。在

谨致问候


Tags: namein功能pandasclosedateindexout
1条回答
网友
1楼 · 发布于 2024-10-01 02:20:48

假设输入是一个数据帧Series,首先执行以下操作

import pandas as pd
fin_series.resample("q",pd.Series.last_valid_index)

得到每个季度最后一个非NA指数的序列。那么

^{pr2}$

最后一个非NA值。然后你可以把它们连在一起。正如你在评论中建议的那样:

fin_series[fin_series.resample("q",pd.Series.last_valid_index)]

相关问题 更多 >