使用Python在索引中分组日期

时间:2017-01-11 02:22:53

标签: python ipython python-3.5

我想按以下格式转换日期列表:

01-02-12
01-03-12
01-27-12
02-01-12
02-23-12
   .
   .
   .
01-03-13 
02-02-13

作为

1
1
1
2
2
.   
.
.
13 
14

即:每个日期按月索引,也与年份相关。

我不知道如何做到这一点并且无法找到类似的问题,所以建议将不胜感激。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~ 编辑: 回应@Psidom。 只是一个带有编号的示例数据集。在实际的数据集中,我处理的是我将日期转换为日期时间对象。

dat = pd.read_csv('matchdata-update.csv',encoding = "ISO-8859-1")   
dat['Date']=pd.to_datetime(dat['Date'],format='%m-%d-%y% I:%M%p'). 

理想情况下,我希望计算一个月,即使没有观察到。 最终目标是为每个月编制索引并计算该insex中的行数,因此如果没有观察到月份,那么为该索引计算的行数将只为0。

2 个答案:

答案 0 :(得分:1)

如果您想计算每个月的行数,这应该有效:

dat.set_index("Date").resample("M").size()

答案 1 :(得分:1)

这是一个不同的答案,使用给定的数据并产生所请求的答案,包括丢失的monthes的0。

dates = '''\
01-02-12
01-03-12
01-27-12
02-01-12
02-23-12
01-03-13 
02-02-13
'''.splitlines()

def monthnum(date, baseyear):
    "Convert date as 'mm-dd-yy' to month number starting with baseyear xx."
    m,d,y = map(int, date.split('-'))
    return m + 12 * (y-baseyear)

print(monthnum(dates[0], 12) == 1, monthnum(dates[-1], 12) == 14)

def monthnums(dates, baseyear):
    "Yield month numbers of 'mm-dd-yy' starting with baseyear."
    for date in dates:
        m,d,y = map(int, date.split('-'))
        yield m + 12 * (y-baseyear)

print(list(monthnums(dates, 12)) == [1,1,1,2,2,13,14])   

def num_per_month(mnums):
    prev, n = 1, 0
    for k in mnums:
        if k == prev:
            n += 1
        else:
            yield prev, n
            for i in range(prev+1, k):
                yield i, 0
            prev, n = k, 1
    yield prev, n

for m, n in num_per_month(monthnums(dates, 12)):
    print(m, n)

打印

True True
True
1 3
2 2
3 0
4 0
5 0
6 0
7 0
8 0
9 0
10 0
11 0
12 0
13 1
14 1