2017-05-09 22 views
1

我有两个dataframes DF1和DF2,其中的concat特定行数据帧在两列中使用的数据作为请求数

都有子帧“数据”和“元数据”和DF1具有比DF2

基本上更多的行
DF1 
    DATA   METADATA 
    0 1 2 3 4 5  attr1  attr2  .. attrN 
11 1 1 1 1 1 1  000  apple 
13 1 1 1 1 1 1  140  orange 
19 1 1 1 1 1 1  199  pineapple 
25 1 5 1 1 1 2  000  apple 
.. 

DF2 
    DATA  METADATA 
    x y z k  attr1  attr2   .. attrK 
000 2 2 2 2  000  bean 
001 2 2 2 2  001  bean 
002 2 2 2 2  002  bean 
003 2 2 2 2  003  bean 
.. 
199 2 2 2 2  199  bean 
200 2 2 2 2  000  orange 
201 2 2 2 2  001  orange 
.. 
340 1 2 3 4  140  orange 
.. 
500 4 3 2 1  000  apple 
.. 
700 2 2 2 2  350  bread 
.. 
999 5 5 5 5  199  pineapple 

我想在DF2中将列中特定的行连接到DF1中的行,基于DF2中的属性。

具体做法是:

对于DF1每一行,我想连接刚刚从该行的数据在DF2使得DF1.METADATA.attr1 & DF2.METADATA.attr1和DF1.METADATA.attr2入口对于每一行,& DF2.METADATA.attr2是相同的。这里的结果将是:

DF3 (desired result) 
     DATA     METADATA 
     0 1 2 3 4 5 x y z k attr1  attr2  .. attr N 
11 1 1 1 1 1 1 4 3 2 1 000   apple 
13 1 1 1 1 1 1 1 2 3 4 140   orange 
19 1 1 1 1 1 1 5 5 5 5 199   pineapple 
25 1 5 1 1 1 2 4 3 2 1 000   apple 

我设法通过循环做到这一点,但我得到一个可怕的运行,并具有大量的数据,我需要使其运行速度更快,应该有一个快速和容易这样,通过大熊猫喜欢你想要做的attR1位合并做到这一点(我想!)

回答

0

这听起来,像:

df1.merge(df2, how='left') 

例如(略有改动):

In [11]: df1 
Out[11]: 
    DATA    METADATA 
     0 1 2 3 4 5 attr1  attr2 
11 1 1 1 1 1 1  0  bean 
13 1 1 1 1 1 1  140  orange 
19 1 1 1 1 1 1  199 pineapple 
25 1 5 1 1 1 2  0  apple 

In [12]: df2 
Out[12]: 
    DATA   METADATA 
    x y z k attr1 attr2 
0 2 2 2 2  0 bean 
1 7 2 2 2  0 apple 
2 2 2 2 2  2 bean 
3 7 2 2 2  3 bean 

In [13]: df1.merge(df2, how="left") 
Out[13]: 
    DATA    METADATA   DATA 
    0 1 2 3 4 5 attr1  attr2 x y z k 
0 1 1 1 1 1 1  0  bean 2.0 2.0 2.0 2.0 
1 1 1 1 1 1 1  140  orange NaN NaN NaN NaN 
2 1 1 1 1 1 1  199 pineapple NaN NaN NaN NaN 
3 1 5 1 1 1 2  0  apple 7.0 2.0 2.0 2.0 

注意:这将合并到共享列上,在这种情况下为METADATA attr1和attr2。请参阅merge section of the docs

+0

我认为这可能会工作;让我测试它。理想情况下,我希望最终数据框中的两个DATA在一个DATA下,但这是我可以自己做的简单修复。 但是,这是否推广到当我有多个属性,我不想基于任何合并?例如,如果在你的例子中,我在df1和df2中都有几个属性,并且所有这些属性都与我想合并的内容完全无关 – Ted

相关问题