我有两个系列,bids
和asks
,均按时编入索引。
某些时间戳重复,表示价格已多次更新,但时间戳分辨率太大,无法捕捉到差异。
bids
2018-06-15 06:00:04.129817+00:00 3525.0
2018-06-15 06:00:04.281829+00:00 3526.0
2018-06-15 06:00:05.417908+00:00 3525.0
2018-06-15 06:00:06.537999+00:00 3526.0
2018-06-15 06:00:09.977950+00:00 3525.0 \___ duplicate timestamps
2018-06-15 06:00:09.977950+00:00 3526.0 /
2018-06-15 06:00:12.674419+00:00 3525.0
asks
2018-06-15 06:00:04.129817+00:00 3526.0
2018-06-15 06:00:04.281829+00:00 3527.0
2018-06-15 06:00:05.417908+00:00 3526.0
2018-06-15 06:00:05.485926+00:00 3527.0 \___ duplicate timestamps
2018-06-15 06:00:05.485926+00:00 3526.0 /
2018-06-15 06:00:06.537999+00:00 3527.0
2018-06-15 06:00:09.977950+00:00 3526.0 \___ duplicate timestamps
2018-06-15 06:00:09.977950+00:00 3527.0 /
2018-06-15 06:00:12.674419+00:00 3526.0
2018-06-15 06:00:17.333349+00:00 3527.0
我想将这两个系列合并到一个数据框中。我将pandas.merge
与外部联接一起使用,并将两个系列的索引用作合并键:
>>> pandas.merge(bids, asks, how='outer', left_index=True, right_index=True)
bids asks
2018-06-15 06:00:04.129817+00:00 3525.0 3526.0
2018-06-15 06:00:04.281829+00:00 3526.0 3527.0
2018-06-15 06:00:05.417908+00:00 3525.0 3526.0
2018-06-15 06:00:05.485926+00:00 NaN 3527.0
2018-06-15 06:00:05.485926+00:00 NaN 3526.0
2018-06-15 06:00:06.537999+00:00 3526.0 3527.0
2018-06-15 06:00:09.977950+00:00 3525.0 3526.0
2018-06-15 06:00:09.977950+00:00 3525.0 3527.0
2018-06-15 06:00:09.977950+00:00 3526.0 3526.0
2018-06-15 06:00:09.977950+00:00 3526.0 3527.0
2018-06-15 06:00:12.674419+00:00 3525.0 3526.0
2018-06-15 06:00:17.333349+00:00 NaN 3527.0
当bids
和asks
中都存在相同的时间戳记时,将在一行中分别包含各自的值:
2018-06-15 06:00:04.129817+00:00 3525.0 3526.0
如果仅在一侧存在重复的时间戳记,那么重复的结果将导致添加相同数量的行,而另一侧具有NaN
值:
2018-06-15 06:00:05.485926+00:00 NaN 3527.0
2018-06-15 06:00:05.485926+00:00 NaN 3526.0
但是,当两边都存在重复的时间戳记时,我会得到多行,两边的值都是笛卡尔积(例如:A,A
,A,B
,B,A
,{{ 1}}):
B,B
我只希望有2行(2018-06-15 06:00:09.977950+00:00 3525.0 3526.0
2018-06-15 06:00:09.977950+00:00 3525.0 3527.0
2018-06-15 06:00:09.977950+00:00 3526.0 3526.0
2018-06-15 06:00:09.977950+00:00 3526.0 3527.0
,A,A
):
B,B
这可能吗?
答案 0 :(得分:0)
您可以使用DataFrame.duplicated
根据您的时间戳列查找重复的行,并向重复项添加1微秒以创建不同的行
答案 1 :(得分:0)
您可以尝试
df1.reset_index().merge(df2.reset_index(),on='index',how='outer')