假设我的财务数据位于pandas.Series
,名为fin_series.
点击fin_series
。
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
我有兴趣查看数据的季度端点。但是,并非所有的金融交易日都落在本季度的末尾。'
例如:
In [566]: fin_series.asfreq('q')
Out[566]:
2008-06-30 976.169624
2008-09-30 819.518923
2008-12-31 760.429261
...
2009-06-30 795.768956
2009-09-30 870.467121
2009-12-31 886.329978
...
2011-09-30 963.304679
2011-12-31 NaN
2012-03-31 NaN
....
2012-09-30 NaN
2012-12-31 1095.757137
2013-03-31 NaN
2013-06-30 NaN
...
2014-03-31 1138.548881
2014-06-30 1168.248194
2014-09-30 1147.000073
Freq: Q-DEC, Name: Close, dtype: float64
这是一个完成我喜欢的功能,以及期望的最终结果。
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
来解决这个问题。或asfreq.
任何可以向我展示内置pandas
功能的人都将非常感激。
此致
答案 0 :(得分:1)
假设输入是数据帧 Series
,首先
import pandas as pd
fin_series.resample("q",pd.Series.last_valid_index)
获取每季度最后一次非NA指数的系列。然后
fin_series.resample("q","last")
表示最后一个非NA值。然后,您可以将它们连接在一起正如您在评论中所建议的那样:
fin_series[fin_series.resample("q",pd.Series.last_valid_index)]