当我的日期列不是Python中的索引时,如何基于日期对数据框进行子集化?

时间:2014-10-13 12:17:20

标签: python date subset

我有一个带有日期列(不是索引)的大型数据集,格式为%Y-%m-%d %H:%M:%S

我想创建此数据框的季度子集,即数据框dfQ1将包含日期在月[1和4]之间的所有行,dfQ2将包含所有行日期在月[5和8]之间,等等......子集的标题与主数据框的标题相同。

我该怎么做?

谢谢!

3 个答案:

答案 0 :(得分:1)

我会添加一个包含季度信息的新列,即:

from datetime import datetime
date_format = "%Y-%m-%d %H:%M:%S"
date_to_qtr = lambda dt: 1 + (datetime.strptime(dt, date_format).month-1) // 3
df['qtr'] = df['date'].apply(date_to_qtr)

(使用floordiv功能)。然后索引新列:

dfQ1 = df[df.qtr == 1]
dfQ2 = df[df.qtr == 2]
dfQ3 = df[df.qtr == 3]
dfQ4 = df[df.qtr == 4]

或者,到那时你可以使用groupby,df.groupby("qtr")(参见docs)。

答案 1 :(得分:1)

使用pandas,您可以先创建一个日期时间列,然后使用date/time quarter attribute创建一个季度列:

from datetime import datetime
date_format = "%Y-%m-%d %H:%M:%S"
df['datetime'] = [datetime.strptime(dt, date_format) for dt in df['date']]
df['quarter'] = [dt.quarter for dt in df['datetime']]

从那里你可以使用groupby(df.groupby('quarter'))或索引来对数据帧进行子集化:

dfQ1 = df[df.quarter == 1]
dfQ2 = df[df.quarter == 2]
dfQ3 = df[df.quarter == 3]
dfQ4 = df[df.quarter == 4]

答案 2 :(得分:0)

假设您正在使用Pandas。

dfQ1 = df [(df.date> Qstartdate)& (df.date< Qenddate)]