我有一个像这样的 Pandas DataFrame

python - 调整 Pandas 中的月度时间序列数据-LMLPHP

如您所见,数据对应于月末数据。问题是所有列的月末日期都不相同。 (根本原因是当月的最后一个交易日并不总是与月末重合。)

目前,2016年1月底有“2016-01-29”和“2016-01-31”两行。它应该只是一排。例如,2016 年 1 月末指数 A、指数 B 和指数 C 应该是 451.1473 1951.218 1401.093。

另一点是,即使每一行几乎总是对应于月末数据,但数据可能不够好,并且可以想象包含随机列的月中数据。在这种情况下,我不想进行任何调整以捕获任何先前的数据收集错误。

实现这一目标的最有效方法是什么。

编辑:

            Index A  Index B Index C
DATE
2015-03-31  2067.89  1535.07   229.1
2015-04-30  2085.51     1543   229.4
2015-05-29  2107.39      NaN     NaN
2015-05-31      NaN  1550.39   229.1
2015-06-30  2063.11  1534.96     229
2015-07-31  2103.84      NaN   228.8
2015-08-31  1972.18  1464.32     NaN
2015-09-30  1920.03  1416.84   227.5
2015-10-30  2079.36      NaN     NaN
2015-10-31      NaN  1448.39   227.7
2015-11-30  2080.41   1421.6   227.6
2015-12-31  2043.94  1408.33   227.5
2016-01-29  1940.24      NaN     NaN
2016-01-31      NaN  1354.66   227.5
2016-02-29  1932.23  1355.42   227.3

因此,在这种情况下,我需要在 2015-05、2015-10、2016-01 年底合并行。但是,2015-07 和 2015-08 的行根本没有数据。因此,在这种情况下,我想将 2015-07 和 2015-08 保留为 NaN,而我想合并 2015-05、2015-10、2016-01 的月末行。希望这为我正在尝试做的事情提供了更多的见解。

最佳答案

您可以使用:

df = df.groupby(pd.TimeGrouper('M')).fillna(method='ffill')
df = df.resample(rule='M', how='last')

创建一个新的 DateTimeIndex 结束于月份的最后一天,并对每个月份的最后一个可用数据点进行采样。 fillna() 确保对于最后一个可用日期缺少数据的列,您使用先前的可用值。

关于python - 调整 Pandas 中的月度时间序列数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36314144/

10-12 14:25
查看更多