在最近的UNIX时间戳上合并两个DataFrame

时间:2016-05-09 18:15:22

标签: python pandas join merge timestamp

我有两组数据,通常有不同的长度,其中包含一个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'格式。

任何想法都会很棒。

1 个答案:

答案 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