gpt4 book ai didi

python - Pandas groupby : group by semester

转载 作者:行者123 更新时间:2023-12-01 09:08:28 28 4
gpt4 key购买 nike

我需要按学期对数据进行分组,但没有可用的频率标签 here

2QS(从开始起 2 个季度)和 6MS(从开始起 6 个月)不会这样做,因为它们将根据第一个日期时间在不同的时刻开始我的数据框。 (非常违反直觉并且容易出错,恕我直言:我没有看到这个问题,直到我使用了从五月而不是一月开始的不同数据集......)

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

关于python - Pandas groupby : group by semester,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51854809/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com