python - Pandas groupby : group by semester

标签 python pandas pandas-groupby

我需要按学期对数据进行分组,但没有可用的频率标签 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/

相关文章:

python - 如何根据函数中给定的列值对列进行分组和排序

python - 从 xpath 中的多个子节点中选择文本

javascript - Python Bokeh CustomJS RadioGroup

python - 从包含全名的字符串中获取函数

python - 如何抑制 Pandas Future 警告?

python - 如何使用Multiindex聚合到pandas列表中?

python - 将颜色图作为参数传递给函数

python - Pandas Dataframe - 在特定行中选择具有特定值的列

python - 更快的日期格式化解决方案

python - 如何使用 pandas 中的列表和索引之间的比较来删除列表中的项目?