簡體   English   中英

MultiIndex的重采樣

[英]Resampling of MultiIndex

我想按類型對數據集進行每日細分。 沒有每種類型的每一天的記錄,它們不存在的地方我想要 NaN。

我能夠得到一個“每天重新采樣”的結果,但類型被省略了。

下面的代碼應該是一個完整的工作示例(好吧,除了最后的已知錯誤之外工作:):

import pandas as pd
import datetime as dt

df = pd.DataFrame({
    'Date': [dt.datetime(2021,1,1), dt.datetime(2021, 1, 3), dt.datetime(2020,1,2)],
    'Type': ['A', 'A', 'B'],
    'Value': [1,2,3]
})

df.set_index('Date', inplace=True)
#   this loses the 'type'
print(df.resample('1D').mean())

df = df.reset_index().set_index(['Date', 'Type'])

#   this raises an exception "TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'MultiIndex'"
print(df.resample('1D').mean())

Output 我要找的是每一天的一行/類型組合:

日期 類型 價值
20210101 一個 1
20210102 一個
20210103 一個 2
20210101
20210102 3
20210103

感激地收到任何建議或指示。

如果可能需要每組重新采樣,請使用Grouper每天重新采樣,然后使用Series.unstackDataFrame.stack來添加缺失值:

df = (df.groupby(['Type', pd.Grouper(freq='1D', key='Date')])['Value']
        .mean()
        .unstack()
        .stack(dropna=False)
        .reset_index(name='Value')
      
      )
print (df)  
  Type       Date  Value
0    A 2021-01-01    1.0
1    A 2021-01-02    NaN
2    A 2021-01-03    2.0
3    B 2021-01-01    NaN
4    B 2021-01-02    3.0
5    B 2021-01-03    NaN

如果只需要 append 每組缺少日期時間,則使用DataFrame.reindex

mux = pd.MultiIndex.from_product([df['Type'].unique(),
                                  pd.date_range(df['Date'].min(), df['Date'].max())], 
                                  names=['Date','Type'])
df = df.set_index(['Type','Date']).reindex(mux).reset_index()
print (df)                
  Date       Type  Value
0    A 2021-01-01    1.0
1    A 2021-01-02    NaN
2    A 2021-01-03    2.0
3    B 2021-01-01    NaN
4    B 2021-01-02    3.0
5    B 2021-01-03    NaN

暫無
暫無

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

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