python - Pandas 中的采样从 1 个月减少到几个月

标签 python pandas time-series

我有一个跨度为 36 个月的数据集。我想对 3 个月的时间进行下采样。我使用:

df = df.resample('3M').sum()

但是,当我查看输出时,它似乎没有正确分隔月份。例如,以下是 36 个月的数据:

1901-01-01    266.0
1901-02-01    145.9
1901-03-01    183.1
1901-04-01    119.3
1901-05-01    180.3
1901-06-01    168.5
1901-07-01    231.8
1901-08-01    224.5
1901-09-01    192.8
1901-10-01    122.9
1901-11-01    336.5
1901-12-01    185.9
1902-01-01    194.3
1902-02-01    149.5
1902-03-01    210.1
1902-04-01    273.3
1902-05-01    191.4
1902-06-01    287.0
1902-07-01    226.0
1902-08-01    303.6
1902-09-01    289.9
1902-10-01    421.6
1902-11-01    264.5
1902-12-01    342.3
1903-01-01    339.7
1903-02-01    440.4
1903-03-01    315.9
1903-04-01    439.3
1903-05-01    401.3
1903-06-01    437.4
1903-07-01    575.5
1903-08-01    407.6
1903-09-01    682.0
1903-10-01    475.3
1903-11-01    581.3
1903-12-01    646.9

如果我在 3 个月内重新采样,我会得到以下结果:

1901-01-31     266.0
1901-04-30     448.3
1901-07-31     580.6
1901-10-31     540.2
1902-01-31     716.7
1902-04-30     632.9
1902-07-31     704.4
1902-10-31    1015.1
1903-01-31     946.5
1903-04-30    1195.6
1903-07-31    1414.2
1903-10-31    1564.9
1904-01-31    1228.2

如果我们查看第一个元素,它不会对前 3 个月求和,而是仅输出第一个月。之后,需要三个月的时间开始对它们求和并重复此操作,直到到达数据集的末尾。输出中的最后一个点仅对数据集中的最后两个点求和。更不用说日期都搞乱了。我期待:

1901-03-31
1901-06-30
1901-09-31

而不是

1901-01-31
1901-04-30
1901-07-31
1901-10-31

最佳答案

您需要参数 close='left' 它会查找最晚可能的开始,因为默认参数 close='rigth' 会查找最早可能的开始。

resample 的文档:

closed : {‘right’, ‘left’}

Which side of bin interval is closed. The default is ‘left’ for all frequency offsets except for ‘M’, ‘A’, ‘Q’, ‘BM’, ‘BA’, ‘BQ’, and ‘W’ which all have a default of ‘right’.

df = df.resample('3M',closed='left').sum()
print (df)
               col
1901-03-31   595.0
1901-06-30   468.1
1901-09-30   649.1
1901-12-31   645.3
1902-03-31   553.9
1902-06-30   751.7
1902-09-30   819.5
1902-12-31  1028.4
1903-03-31  1096.0
1903-06-30  1278.0
1903-09-30  1665.1
1903-12-31  1703.5

df = df.resample('3M').sum()
#df = df.resample('3M',closed='right').sum()
print (df)
               col
1901-01-31   266.0
1901-04-30   448.3
1901-07-31   580.6
1901-10-31   540.2
1902-01-31   716.7
1902-04-30   632.9
1902-07-31   704.4
1902-10-31  1015.1
1903-01-31   946.5
1903-04-30  1195.6
1903-07-31  1414.2
1903-10-31  1564.9
1904-01-31  1228.2

关于python - Pandas 中的采样从 1 个月减少到几个月,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48114587/

相关文章:

python - 为什么在 Twisted 中没有实现反向 DNS 解析?

python - 无法让测试传递采用带有多位字段的 POST 表单的 View

python - 将 NumPy 数组操作与 Numba 的 @guvectorize 结合使用

python - 使用分层列连接两个 DataFrame

python - 数据透视表的 Pandas 反转

python - Matplotlib 热图标签

dataset - 有效地合并 mathematica 中的时间序列

python - 如何同时迭代两个变量?

python - Python训练数据集

Gnuplot:时间序列图中的 x 轴窄标签间距