如何加快数据帧搜索和分配值?

时间:2017-09-14 12:58:11

标签: python pandas dataframe

例如,我有两个数据帧

DF1:

Shape

DF2:

        0        1           2           3 
0      Name     Unit      Attribute     Date
1      a        A           xxy         xxx
2      b        B           xyx         xxx
3      c        C           xxx         xxx
4      d        D           yxx         xxx
5      e        E           yxy         yyy

我想用df2中的相应条目覆盖df1中的条目。

例如,用df2.loc [2,2]覆盖df1.loc [5,3]。也就是说,对于具有相同“名称”的行,如果它位于df2中,则覆盖df1的相同列。

目前,我正在以愚蠢的方式这样做:

        0        1        2       
      Name     Unit      Date
0      a        F        xxx
1      b        G        xxx
2      e        H        xxx
3      f        I        xxx

我并不为此感到自豪。我做了一些研究,并提出用set_value()替换'=',这有帮助。我真的很期待听到其他建议。实际问题的大小是200行和30列。因此,遍历所有for循环需要20秒。

1 个答案:

答案 0 :(得分:2)

IIUC,使用mergefillna。您需要稍微清理一下数据。这是我用来参考的内容。

 df1

  Name Unit Attribute Date
0    a    A       xxy  xxx
1    b    B       xyx  xxx
2    d    C       xxx  xxx
3    e    D       yxx  xxx
4    e    E       yxy  xxx

df2

  Name Unit Date
0    a    F  xxx
1    b    G  xxx
2    e    H  xxx
3    f    H  xxx
out = df1[['Name', 'Attribute']].merge(df2, how='left').fillna(df1)
out

  Name Attribute Unit Date
0    a       xxy    F  xxx
1    b       xyx    G  xxx
2    d       xxx    C  xxx
3    e       yxx    H  xxx
4    e       yxy    H  xxx