假设这是我的df:
Name1 Name2 date
1 John Jay 2015-01-01 06:01:00
2 Sara Debra 2015-01-01 06:05:00
3 Ben Beth 2015-01-01 06:09:00
我想填写df,在其中每行都应重复并增加1分钟,直到到达下一行为止,因此输出应为:
Name1 Name2 date
1 John Jay 2015-01-01 06:01:00
1 John Jay 2015-01-01 06:02:00
1 John Jay 2015-01-01 06:03:00
1 John Jay 2015-01-01 06:04:00
2 Sara Debra 2015-01-01 06:05:00
2 Sara Debra 2015-01-01 06:06:00
3 Ben Beth 2015-01-01 06:07:00
我研究了date_range,但是没有找到一个丑陋且效率低下的for循环,找不到合适的方法。
任何帮助将不胜感激!
答案 0 :(得分:2)
如果所有日期时间都是唯一的,则可以使用DataFrame.asfreq
:
df['date'] = pd.to_datetime(df['date'])
df1 = (df.set_index('date')
.asfreq('Min', method='ffill')
.reset_index().reindex(df.columns, axis=1))
对我来说,DataFrame.resample
与DatetimeIndex
和Resampler.ffill
一起使用的解决方案:
df1 = df.set_index('date').resample('1Min').ffill().reset_index().reindex(df.columns, axis=1)
print (df1)
Name1 Name2 date
0 John Jay 2015-01-01 06:01:00
1 John Jay 2015-01-01 06:02:00
2 John Jay 2015-01-01 06:03:00
3 John Jay 2015-01-01 06:04:00
4 Sara Debra 2015-01-01 06:05:00
5 Sara Debra 2015-01-01 06:06:00
6 Sara Debra 2015-01-01 06:07:00
7 Sara Debra 2015-01-01 06:08:00
8 Ben Beth 2015-01-01 06:09:00
答案 1 :(得分:2)
尝试一下:
df.resample('60S', on='date').pad()
这是一个简单的上采样,然后用pad()
来填充缺失值的情况。