簡體   English   中英

Pandas:如何將系列的 MultiIndex 折疊為 DateTimeIndex?

[英]Pandas: how to collapse a Series' MultiIndex to a DateTimeIndex?

作為Pandas groupby的后續:按學期分組,我需要將系列的 MultiIndex 折疊為 DateTimeIndex。

我已經看過Collapse Pandas MultiIndex to Single Index但無濟於事。 我不能讓它工作。

系列ser是:

dtime  dtime
2016   1        78.0
       7        79.0
2017   1        73.0
       7        79.0
2018   1        79.0
       7        71.0
Name: values, dtype: float64

如何將dtime折疊為單個 DateTimeIndex?

dtime
2016-01-01      78.0
2016-07-01      79.0
2017-01-01      73.0
2017-07-01      79.0
2018-01-01      79.0
2018-07-01      71.0
Name: values, dtype: float64

這是生成我的演示系列ser的代碼:

from datetime import *
import pandas as pd
import numpy as np

np.random.seed(seed=1111)
days = pd.date_range(start="2016-02-15", 
                     end="2018-09-12",
                    freq="2W")

df = pd.DataFrame({"dtime":days, "values":np.random.randint(50, high=80, size=len(days))}).set_index("dtime")

# group by semester
year = df.index.year.astype(int)
month = (df.index.month.astype(int) - 1) // 6 * 6 + 1
grouped = df.groupby([year, month])

ser = grouped.describe()[("values", "max")].rename("values")
print(ser)

您需要將MultiIndexSeries級別連接在一起並轉換為datetimes

idx = ser.index.get_level_values(0).astype(str) +  ser.index.get_level_values(1).astype(str)

ser.index = pd.to_datetime(idx, format='%Y%m')
print(ser)
2016-01-01    78.0
2016-07-01    79.0
2017-01-01    73.0
2017-07-01    79.0
2018-01-01    79.0
2018-07-01    71.0
Name: values, dtype: float64

或者:

dates = pd.to_datetime(year.astype(str) + month.astype(str), format='%Y%m')
grouped = df.groupby(dates)

ser = grouped.describe()[("values", "max")].rename("values")
print (ser)
2016-01-01    78.0
2016-07-01    79.0
2017-01-01    73.0
2017-07-01    79.0
2018-01-01    79.0
2018-07-01    71.0
Name: values, dtype: float64

暫無
暫無

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

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