簡體   English   中英

Pandas groupby:按學期分組

[英]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 問題:

  1. 為什么標簽W (周末)可用,而WS (周末)不可用?

  2. 如何在一行中寫這個?

     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.

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