我有两个数据帧DF1和DF2,其中
都具有子帧“数据”和“元数据”,并且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中的属性将DF2中的列式特定行连接到DF1中的行。
具体做法是:
对于DF1中的每一行,我想只连接DF2中行的DATA,以便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
我已经设法通过循环来完成它,但是我得到了一个糟糕的运行时并且需要大量数据才能让它运行得更快并且应该有一种通过熊猫快速简单地完成此操作的方法(我想! )
答案 0 :(得分:0)
听起来你想在attr1上进行合并,例如:
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。