簡體   English   中英

當我的日期列不是Python中的索引時,如何基於日期對數據框進行子集設置?

[英]How can I subset a data frame based on dates, when my dates column is not the index in Python?

我有一個帶有日期列(不是索引)的大型數據集,其日期格式為%Y-%m-%d %H:%M:%S

我想創建該數據框的季度子集,即數據框dfQ1將包含日期在月份[1和4]之間的所有行, dfQ2將包含日期在月[5和8]之間的所有行,等等...子集的標頭與主數據幀的標頭相同。

我怎樣才能做到這一點?

謝謝!

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

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 )。

使用熊貓,您可以先創建一個datetime列,然后使用date / time Quarter屬性創建一個Quarter列:

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') )或通過建立索引來對數據df.groupby('quarter')進行子集化:

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

假設您正在使用熊貓。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM