我想按以下格式转换日期列表:
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。
答案 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