我有两组数据,通常有不同的长度,其中包含一个UNIX时间戳列。一个日期框架通常具有一致的间隔数据,而关闭具有一些偏移但仍然每5秒(0,5,10,15对3,8,13,18)是不可预测的。
df1 df2
0 1428796819 | 0 1428796800
1 1428796824 | 1 1428796805
2 1428796829 | 2 1428796810
3 1428796834 | 3 1428796815
4 1428796839 | 4 1428796820
5 1428796844 | 5 1428796825
我希望根据最近的日期合并这两个Dataframe。我很高兴有NaN'由于df长度不匹配。 UNIX时间戳位于' int64'格式。
任何想法都会很棒。
答案 0 :(得分:0)
您可以尝试重新采样时间戳,如下所示:
data = """\
ts
1428796819
1428796824
1428796829
1428796834
1428796839
1428796844
"""
df1 = pd.read_csv(io.StringIO(data), parse_dates=['ts'], date_parser=lambda x: pd.to_datetime(x, unit='s'))
df1['df1'] = range(len(df1))
data = """\
ts
1428796800
1428796805
1428796810
1428796815
1428796820
1428796825
"""
df2 = pd.read_csv(io.StringIO(data), parse_dates=['ts'], date_parser=lambda x: pd.to_datetime(x, unit='s'))
df2['df2'] = range(len(df2))
(df1.set_index('ts')
.resample('5S')
.last()
.join(df2.set_index('ts')
.resample('5S')
.last(),
rsuffix='_r')
)
测试:
In [88]: df1
Out[88]:
ts df1
0 2015-04-12 00:00:19 0
1 2015-04-12 00:00:24 1
2 2015-04-12 00:00:29 2
3 2015-04-12 00:00:34 3
4 2015-04-12 00:00:39 4
5 2015-04-12 00:00:44 5
In [89]: df2
Out[89]:
ts df2
0 2015-04-12 00:00:00 0
1 2015-04-12 00:00:05 1
2 2015-04-12 00:00:10 2
3 2015-04-12 00:00:15 3
4 2015-04-12 00:00:20 4
5 2015-04-12 00:00:25 5
In [90]: (df1.set_index('ts')
....: .resample('5S')
....: .last()
....: .join(df2.set_index('ts')
....: .resample('5S')
....: .last(),
....: rsuffix='_r')
....: )
Out[90]:
df1 df2
ts
2015-04-12 00:00:15 0 3.0
2015-04-12 00:00:20 1 4.0
2015-04-12 00:00:25 2 5.0
2015-04-12 00:00:30 3 NaN
2015-04-12 00:00:35 4 NaN
2015-04-12 00:00:40 5 NaN