Pandas 在多个时隙上拆分值数据帧

Pandas 在多个时隙上拆分值数据帧,pandas,dataframe,datetime,Pandas,Dataframe,Datetime,希望将15分钟间隔的值均匀分布在5分钟间隔上。但却无法让它发挥作用。数据如下: Datetime a 2018-01-01 00:00:00 6 2018-01-01 00:15:00 3 2018-01-01 00:30:00 9 预期的产出将是: Datetime a 2018-01-01 00:00:00 2 2018-01-11 00:05:00

希望将15分钟间隔的值均匀分布在5分钟间隔上。但却无法让它发挥作用。数据如下:

         Datetime      a   
2018-01-01 00:00:00     6   
2018-01-01 00:15:00     3   
2018-01-01 00:30:00     9
预期的产出将是:

         Datetime         a  
 2018-01-01 00:00:00       2   
 2018-01-11 00:05:00       2  
 2018-01-11 00:10:00       2  
 2018-01-11 00:15:00       1  
 2018-01-11 00:20:00       1  
 2018-01-11 00:25:00       1  
 2018-01-11 00:30:00       3  
 2018-01-11 00:35:00       3  
 2018-01-11 00:40:00       3  

可能是不必要的,但数据中
00:00:00
的值“6”分布在
00:00:00-00:10:00
的间隔上,方法略有不同:

# convert to datetime
df.Datetime = pd.to_datetime(df.Datetime)

# set Datetime as index
df.set_index('Datetime', inplace=True)

# add one extra row
df.loc[df.index.max()+pd.to_timedelta('10min')] = 0

# set_index and resample
s = df.asfreq('5T', fill_value=0)

# transform the 0's to mean:
(s.groupby(s['a'].ne(0)
  .cumsum())
  .transform('mean')
  .reset_index()
)
输出:

             Datetime  a
0 2018-01-01 00:00:00  2
1 2018-01-01 00:05:00  2
2 2018-01-01 00:10:00  2
3 2018-01-01 00:15:00  1
4 2018-01-01 00:20:00  1
5 2018-01-01 00:25:00  1
6 2018-01-01 00:30:00  3
7 2018-01-01 00:35:00  3
8 2018-01-01 00:40:00  3

略有不同的做法:

# convert to datetime
df.Datetime = pd.to_datetime(df.Datetime)

# set Datetime as index
df.set_index('Datetime', inplace=True)

# add one extra row
df.loc[df.index.max()+pd.to_timedelta('10min')] = 0

# set_index and resample
s = df.asfreq('5T', fill_value=0)

# transform the 0's to mean:
(s.groupby(s['a'].ne(0)
  .cumsum())
  .transform('mean')
  .reset_index()
)
输出:

             Datetime  a
0 2018-01-01 00:00:00  2
1 2018-01-01 00:05:00  2
2 2018-01-01 00:10:00  2
3 2018-01-01 00:15:00  1
4 2018-01-01 00:20:00  1
5 2018-01-01 00:25:00  1
6 2018-01-01 00:30:00  3
7 2018-01-01 00:35:00  3
8 2018-01-01 00:40:00  3

这一个基本上可以工作,但不会对最后一个条目执行操作,这可以从您的输出中记录为well@KVA谢谢,我不知道。我们需要在插值前的最长时间+10分钟再添加一行。请参阅更新。这一项主要起作用,但不会对最后一个条目执行操作,这可以从您的输出中记录为well@KVA谢谢,我不知道。我们需要在插值前的最长时间+10分钟再添加一行。请参阅更新。