微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

参见英文答案 > Merge and update dataframes based on a subset of their columns                                    3个
例如,我有两个数据帧

DF1:

        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:

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

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

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

目前,我是以一种愚蠢的方式做到这一点:

def find_column_num(key, df_name, start_row, stop_row, start_column, stop_column):
    for i in range(start_row,stop_row+1):
        for j in range(start_column, stop_column+1):
            if df_name.loc[i,j]== key:
                column_num_with_key = j
                return column_num_with_key
                break 

for i in range(0,len(df1.index)):
    for ii in range(0,len(df2.index)):
       if df1.loc[i,0] == df2.loc[ii,0]:
          for j in range(0,len(df1.columns)):
              if df1.loc[0,j] in df2.loc[0,:]:
                   df1.set_value(i,j, df2.loc[ii,find_column_num(df1.loc[0,j],df2,0,0,0,len(df2.columns))]

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

解决方法:

IIUC,使用merge和fillna.您需要稍微清理一下数据.这是我用来参考的.

 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐