python - How to concat two DataFrames by comparing overlapping columns in pandas? -


df1 , df2 2 dataframe objects measurement own relative time stamps (no absolute time). last n values of df1['voltage'] first n of df2['voltage'], i. e. there overlapping data. n unknown me.

i want df3, concatenates df1 , df2 in such way redundant data left out.

is there way using pandas? i've tried looking merge , join , concat methods, didn't find solutions question -- lack of absolute time in order compare 2 objects seems problem. short example (in general, time , voltage floats, not ints):

df1

      name          value          dim         time          voltage        abc            000            s            0                5        ghi            001            m            1                6        nan            nan          nan            2                5        nan            nan          nan            3                6        nan            nan          nan            4                7        nan            nan          nan            5                7        nan            nan          nan            6                6        nan            nan          nan            7                7        nan            nan          nan            8                7        nan            nan          nan            9                6 

df2

      name          value          dim         time          voltage        abc            000            s            0                7        ghi            001            m            1                6        nan            nan          nan            2                7        nan            nan          nan            3                7        nan            nan          nan            4                6        nan            nan          nan            5                4        nan            nan          nan            6                2        nan            nan          nan            7                6        nan            nan          nan            8                7        nan            nan          nan            9                7 

in example, last 5 values of df1 present in df2. operation should deliver

df3

      name          value          dim         time          voltage        abc            000            s            0                5        def            001            m            1                6        nan            nan          nan            2                5        nan            nan          nan            3                6        nan            nan          nan            4                7        nan            nan          nan            5                7        nan            nan          nan            6                6        nan            nan          nan            7                7        nan            nan          nan            8                7        nan            nan          nan            9                6        nan            nan          nan           10                4        nan            nan          nan           11                2        nan            nan          nan           12                6        nan            nan          nan           13                7        nan            nan          nan           14                7 

it feels simple , common problem, cannot find , idea right along lines of

for in xrange(1, len(df1['voltage'])):     l1 = df1['voltage'][-i:].values     l2 = df2['voltage'][:i].values     if np.allclose(l1, l2):         n = 

and using concat. excruciatingly slow (especially since cannot break after 1 match found; there others later).

is there fast (and preferably easy) way in pandas?


Comments