[英]Pandas groupby: group by semester
我需要組數據由學期但沒有射頻標簽可在這里
根據我的數據框中的第一個日期時間, 2QS
(從開始的兩個季度)和6MS
(從開始的 6 個月)不會因為它們將在不同的時刻開始。 (非常違反直覺且容易出錯,恕我直言:直到我使用了從 5 月而不是 1 月開始的不同數據集,我才看到這個問題......)
from datetime import *
import pandas as pd
import numpy as np
df = pd.DataFrame()
days = pd.date_range(start="2017-05-17",
end="2017-11-29",
freq="1D")
df = pd.DataFrame({'DTIME': days, 'DATA': np.random.randint(50, high=80, size=len(days))})
df.set_index('DTIME', inplace=True)
grouped = df.groupby(pd.Grouper(freq='2QS'))
print("Groups date start:")
for dtime, group in grouped:
print dtime
# print(group)
返回
Groups date start:
2017-04-01 00:00:00 <== because my first datetime is in May, 2017
2017-10-01 00:00:00
代替:
Groups date start:
2017-01-01 00:00:00 <== I want the semesters referred to the year!
2017-06-01 00:00:00
作為一種可能的解決方法,我在數據框中創建了兩個新列,然后根據它們進行分組:
df["year"] = df.index.year.astype(int)
df["semester"] = df.index.month.astype(int)
df["semester"] = df["semester"] - 1
df["semester"] = df["semester"] // 6
grouped = df.groupby(["year", "semester"])
這是唯一的方法嗎?
還有另外兩個小問題,只是為了好奇而不值得一個獨立的 stackoverflow 問題:
為什么標簽W
(周末)可用,而WS
(周末)不可用?
如何在一行中寫這個?
df["semester"] = df.index.month.astype(int) df["semester"] = df["semester"] - 1 df["semester"] = df["semester"] // 6
最接近的是anchored-offsets
,但它丟失了一個月。
其次:
df["semester"] = (df.index.month.astype(int) - 1) // 6
或者不創建新列:
years = df.index.year.astype(int)
semes = (df.index.month.astype(int) - 1) // 6
grouped = df.groupby([years, semes])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.