【发布时间】:2012-11-06 20:46:35
【问题描述】:
在与 NumPy 和 dateutil 斗争了几天之后,我最近发现了神奇的 Pandas 库。我一直在研究文档和源代码,但我不知道如何让date_range() 在正确的断点处生成索引。
from datetime import date
import pandas as pd
start = date('2012-01-15')
end = date('2012-09-20')
# 'M' is month-end, instead I need same-day-of-month
date_range(start, end, freq='M')
我想要什么:
2012-01-15
2012-02-15
2012-03-15
...
2012-09-15
我得到了什么:
2012-01-31
2012-02-29
2012-03-31
...
2012-08-31
我需要一个月大小的块来说明一个月中的可变天数。这可以通过 dateutil.rrule 实现:
rrule(freq=MONTHLY, dtstart=start, bymonthday=(start.day, -1), bysetpos=1)
丑陋且难以辨认,但它有效。我怎么能用熊猫做到这一点?我玩过date_range() 和period_range(),到目前为止都没有运气。
我的实际目标是使用groupby、crosstab 和/或resample 根据期间内各个条目的总和/平均值/等计算每个期间的值。换句话说,我想从以下位置转换数据:
total
2012-01-10 00:01 50
2012-01-15 01:01 55
2012-03-11 00:01 60
2012-04-28 00:01 80
#Hypothetical usage
dataframe.resample('total', how='sum', freq='M', start='2012-01-09', end='2012-04-15')
到
total
2012-01-09 105 # Values summed
2012-02-09 0 # Missing from dataframe
2012-03-09 60
2012-04-09 0 # Data past end date, not counted
鉴于 Pandas 最初是一种财务分析工具,我几乎可以肯定有一种简单快捷的方法可以做到这一点。感谢您的帮助!
【问题讨论】:
标签: python pandas datetime time-series