Python 熊猫数据帧中一个月的第一个和最后一个可用数据点

Python 熊猫数据帧中一个月的第一个和最后一个可用数据点,python,pandas,Python,Pandas,在每个月的开始和结束时,我需要用python执行特定的计算。问题是我不能使用如下函数: def first_day_of_year(d): return date(d.year, 1) 因为我使用的数据帧没有一年中每一天的数据点。那么我如何调用一个月内第一个可用的数据点呢?那么如何调用最后一个呢?假设您有一个datetime对象的列表,并且希望按.month属性对它们进行分组。因此,首先需要对它们进行排序,然后可以应用itertools.groupby()函数,该函数返回:一个组值和一

在每个月的开始和结束时,我需要用python执行特定的计算。问题是我不能使用如下函数:

def first_day_of_year(d):
    return date(d.year, 1)

因为我使用的数据帧没有一年中每一天的数据点。那么我如何调用一个月内第一个可用的数据点呢?那么如何调用最后一个呢?

假设您有一个
datetime
对象的列表,并且希望按
.month
属性对它们进行分组。因此,首先需要对它们进行排序,然后可以应用
itertools.groupby()
函数,该函数返回:一个组值和一个迭代器

import itertools

#Your datetime objects
dates = []

dates.sort()

groups = itertools.groupby(time_obj_dates, key = lambda x:x.month)

for mon, dates in groups:
    for date in dates:
        print mon, ("-".join(map(str,[date.year, date.month, date.day])))

>>> 1 1980-1-1
    1 1980-1-2
    1 1980-1-3
    1 1980-1-4
    1 1980-1-7
因此,您可以从输出中看到,我们根据月份对日期进行分组。我们已经对列表进行了排序,因此,为了获得开始日期,我们选择了组中的第一个元素,而对于最后一个日期,我们选择了该组的结束元素

要访问给定组的开始和结束日期,您可以使用:

for mon,dates in groups:
   list_dates = list(dates)
   print mon, list_dates[0], list_dates[-1]

对它们进行排序,第0位的项目将是您所需的输出。谢谢,但如何对特定月份的项目进行排序?提供一些样本数据?1980-01-02 1980-01-03 1980-01-04-诸如此类?1980-01-07 1980-01-08类似的
df.groupby(pandas.TimeGrouper('1M')).first()应该可以工作