大Pandas如何在6个月内重新取样?

2024-04-24 11:48:39 发布

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

我试着做一个简单的重采样,在6个月内求和。为了解释我的问题,我创建了一个简单的玩具系列:

import pandas as pd
import numpy as np

series = pd.Series([1,2,5,6], index=[pd.Timestamp('2018-01-01'), pd.Timestamp('2018-06-30'),pd.Timestamp('2018-07-01'), pd.Timestamp('2018-12-31')])
series

2018-01-01    1
2018-06-30    2
2018-07-01    5
2018-12-31    6
dtype: int64

现在我试着在两个半年内重新取样,第一个我想从2018-01-01到2018-06-30和sum 3,第二个我想从2018-07-01到2018-12-31和sum 11。你知道吗

我得到的是:

series.resample('2Q').sum()
2018-03-31    1
2018-09-30    7
2019-03-31    6
Freq: 2Q-DEC, dtype: int64

series.resample('6M', closed='left').sum()
2018-06-30    1
2018-12-31    7
2019-06-30    6
Freq: 6M, dtype: int64

没有一个是我想要的。我看到了其他关于每6个月重新采样(How to resample 6 months)的问题,但没有显示如何防止这种特定行为。你知道吗


Tags: importnumpypandasasnptimestampseriespd
2条回答

这里有一个方法:0表示前半部分,1表示后半部分

series.groupby([series.index.year,(series.index.month-1)//6]).sum()
Out[489]: 
2018  0     3
      1    11
dtype: int64

我通过将频率更改为季度开始和月份开始来实现,但仍然不理解逻辑:

series.resample('2QS').sum()
2018-01-01     3
2018-07-01    11
Freq: 2QS-JAN, dtype: int64

series.resample('6MS').sum()
2018-01-01     3
2018-07-01    11
Freq: 6MS, dtype: int64

相关问题 更多 >