我有一个包含100K +行的数据集,该数据集上的一列是Datetime列,我们将其命名为A
。
我的数据集按A列排序。
我想“填补我的数据集的空白”,即:如果我有这两行紧随其后:
0 2019-03-13 08:12:20
1 2019-03-13 08:12:25
我想在它们之间添加缺少的秒数,因此,我将得到:
0 2019-03-13 08:12:20
1 2019-03-13 08:12:21
2 2019-03-13 08:12:22
3 2019-03-13 08:12:23
4 2019-03-13 08:12:24
5 2019-03-13 08:12:25
如果它们的天,月或年不同,我不想在两行之间生成行。
因此,如果有这两个连续的行:
0 2019-03-13 08:12:20
1 2019-03-15 08:12:21
我不会添加任何东西。
如果两行之间的时间差大于2小时,则我也无法生成行。
因此,如果有这两个连续的行:
0 2019-03-13 08:12:20
1 2019-03-15 11:12:21
我不会添加任何东西。
这是一个例子来说明我想要什么:
df=pd.DataFrame({'A': ["2019-03-13 08:12:20", "2019-03-13 08:12:25", "2019-03-20 08:17:23", "2019-03-22 08:17:25", "2019-03-22 11:12:20", "2019-03-22 11:12:23", "2019-03-24 12:33:23"]})
A
0 2019-03-13 08:12:20
1 2019-03-13 08:12:25
2 2019-03-20 08:17:23
3 2019-03-22 08:17:25
4 2019-03-22 11:12:20
5 2019-03-22 11:12:23
6 2019-03-24 12:33:23
最后,我想得到以下结果:
A
0 2019-03-13 08:12:20
1 2019-03-13 08:12:21
2 2019-03-13 08:12:22
3 2019-03-13 08:12:23
4 2019-03-13 08:12:24
5 2019-03-13 08:12:25
6 2019-03-20 08:17:23
7 2019-03-22 08:17:25
8 2019-03-22 11:12:20
9 2019-03-22 11:12:21
10 2019-03-22 11:12:22
11 2019-03-22 11:12:23
12 2019-03-24 12:33:23
我尝试了这个:
将熊猫作为pd导入
df=pd.DataFrame({'A': ["2019-03-13 08:12:20", "2019-03-13 08:12:25", "2019-03-20 08:17:23", "2019-03-22 08:17:25", "2019-03-22 11:12:20", "2019-03-22 11:12:23", "2019-03-24 12:33:23"]})
df['A']=pd.to_datetime(df['A'])
fill = [pd.date_range(df.iloc[i]['A'], df.iloc[i+1]['A'], freq='S') for i in range(len(df)-1) if (df.iloc[i+1]['A']-df.iloc[i]['A']).total_seconds()<=7200]
dates = [item for sublist in fill for item in sublist]
df=df.set_index('A').join(pd.DataFrame(index=pd.Index(dates, name='A')), how='outer').reset_index()
print(df)
它正在完成工作,但是速度很慢,有没有更快的方法呢?
可以创建与一组数目的列,其中两个连续行之间的差低于2小时后,使用diff
和cumsum
。然后set_index
,列A将能够resample
按组分组并reset_index
选择所需的列。
df['gr'] = df.A.diff().gt(pd.Timedelta(hours=2)).cumsum()
df_output = df.set_index('A').groupby('gr', as_index=False).resample('s').sum().reset_index()[['A']]
print (df_output)
A
0 2019-03-13 08:12:20
1 2019-03-13 08:12:21
2 2019-03-13 08:12:22
3 2019-03-13 08:12:23
4 2019-03-13 08:12:24
5 2019-03-13 08:12:25
6 2019-03-20 08:17:23
7 2019-03-22 08:17:25
8 2019-03-22 11:12:20
9 2019-03-22 11:12:21
10 2019-03-22 11:12:22
11 2019-03-22 11:12:23
12 2019-03-24 12:33:23
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句