Python 如何使用多索引对数据帧重新采样

Python 如何使用多索引对数据帧重新采样,python,pandas,Python,Pandas,我试图用多索引对数据帧进行重采样,这里的问题似乎都不能回答这个问题。我有一个带有DateTimeIndex的数据框,另一列作为多重索引的一部分。我期待着重新采样这个数据帧到一个更精细的规模,并填补了NaN值与正向填充。以下是我认为有效的方法: arrays = [[dt.datetime(2020,10,2,1,0),dt.datetime(2020,10,2,1,0), dt.datetime(2020,10,2,2,0),dt.datetime(2020,10,2,2,0)] ,[1 ,2

我试图用多索引对数据帧进行重采样,这里的问题似乎都不能回答这个问题。我有一个带有DateTimeIndex的数据框,另一列作为多重索引的一部分。我期待着重新采样这个数据帧到一个更精细的规模,并填补了NaN值与正向填充。以下是我认为有效的方法:

arrays = [[dt.datetime(2020,10,2,1,0),dt.datetime(2020,10,2,1,0), dt.datetime(2020,10,2,2,0),dt.datetime(2020,10,2,2,0)] ,[1 ,2 ,3 ,4 ] ]

values = [i*i for i in range(0,4)]

df = pd.DataFrame(index = arrays ,data = values)
但是,我得到了这个错误:

Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'MultiIndex'

如果有任何方向正确的帮助或指示,我们将不胜感激

将索引作为单个DatetimeIndex保存,然后您可以根据需要重新采样和创建索引:

dates = [dt.datetime(2020,10,2,i,0) for i in range(0,5)]
categories = [ i for i in range(0,5)]
values = [i*i for i in range(0,5)]

df = pd.DataFrame({
    'cat': categories,
    'value': values
}, index=dates)

df = df.resample('5T').ffill().set_index('cat', append=True)
如果数据帧是先前操作的结果,请从索引中删除除datetime以外的所有数据帧:

df = (
    df.reset_index(level=1)
      .resample('5T')
      .ffill()
      .set_index('cat', append=True)
)

将索引保留为单个DatetimeIndex,然后可以根据需要重新采样和重新创建索引:

dates = [dt.datetime(2020,10,2,i,0) for i in range(0,5)]
categories = [ i for i in range(0,5)]
values = [i*i for i in range(0,5)]

df = pd.DataFrame({
    'cat': categories,
    'value': values
}, index=dates)

df = df.resample('5T').ffill().set_index('cat', append=True)
如果数据帧是先前操作的结果,请从索引中删除除datetime以外的所有数据帧:

df = (
    df.reset_index(level=1)
      .resample('5T')
      .ffill()
      .set_index('cat', append=True)
)

如果您正在尝试按多索引重新采样,并且每个组只有一个唯一的行,则无法重新采样。。。换句话说,您有0,1,2,3,4,但是您需要更多的行和更多的时间。本质上,每组多重索引至少需要两个唯一的行。如果你只有一个,你怎么能重新采样,因为你必须有一个最小值和最大值来按你想要的频率重新采样。例如,忘记了多重索引,那么你就不需要使用groupby,这段代码就可以工作了:
df=pd.DataFrame(index=dates,data=value)
和下一行代码
df1=df.resample('5T')).ffill()。。。换句话说,您有0,1,2,3,4,但是您需要更多的行和更多的时间。本质上,每组多重索引至少需要两个唯一的行。如果你只有一个,你怎么能重新采样,因为你必须有一个最小值和最大值来按你想要的频率重新采样。例如,忘记了多重索引,那么你就不需要使用groupby,这段代码就可以工作了:
df=pd.DataFrame(index=dates,data=value)
和下一行代码
df1=df.resample('5T')).ffill()
当然,等等,我的实际数据在多重索引的DateTimeIndex部分有重复的值,所以我不这么认为works@KaneM你能用你的意思更新你的样本数据吗?我的实际数据在多重索引的DateTimeIndex部分有重复的值,所以我不这么认为works@KaneM你能用你想要的更新你的样本数据吗这是什么意思?