如何通过比较pandas中的重叠列来连接两个DataFrame?

时间:2015-06-03 09:28:44

标签: python numpy pandas dataframe

df1df2是来自测量的两个DataFrame对象及其相对时间戳(无绝对时间)。 n的最后df1['voltage']值是n的第一个df2['voltage'],i。即有重叠的数据。我不知道n

我现在想要df3,它以df1df2连接,以便省去冗余数据。

有没有办法用大熊猫做到这一点?我试过调查mergejoinconcat方法,但我没有找到任何问题的解决方案 - 为了比较这两个对象而缺乏绝对时间似乎是问题所在。一个简短的例子(通常,时间和电压是浮点数,而不是整数):

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

在此示例中,df1中包含df2的最后5个值。该操作应该提供

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

感觉就像一个简单而常见的问题,但我找不到任何东西,我现在唯一的想法就是

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

然后使用concat。这非常缓慢(特别是因为在找到一场比赛后我不能break;之后可能会有其他人。)

在熊猫中有没有快速(最好是简单)的方法?

0 个答案:

没有答案