代码之家  ›  专栏  ›  技术社区  ›  sectechguy

熊猫匹配雄伟的百万df请求df

  •  0
  • sectechguy  · 技术社区  · 6 年前

    我有两个数据帧DF1,数据量为百万,而DF2,数据量为代理请求数据。如果DF2是百万级的,我想把它加在上面,如果不是百万级的话,就用100001作为等级。

    df1 
        GlobalRank  Domain
    0   1           google.com
    1   2           facebook.com
    2   3           youtube.com
    3   4           twitter.com
    4   5           microsoft.com
    5   6           linkedin.com
    6   7           instagram.com
    7   8           wikipedia.org
    8   9           plus.google.com
    9   10          apple.com
    
    df2
        flds                    count
    0   google.com              784565
    1   office365.com           36912
    2   doubleclick.net         287232
    3   facebook.com            239662
    4   campsystems.com         231264
    5   live.com                211577
    6   googlesyndication.com   19233
    7   linkedin.com            187754
    8   apple.com               146298
    9   yahoo.com               128401
    

    期望输出:

    df2
        flds                    count     GlobalRank
    0   google.com              784565    1
    1   office365.com           36912     1000001
    2   doubleclick.net         287232    1000001
    3   facebook.com            239662    2
    4   campsystems.com         231264    1000001
    5   live.com                211577    1000001
    6   googlesyndication.com   19233     1000001
    7   linkedin.com            187754    6
    8   apple.com               146298    10
    9   plus.google.com         128401    9
    

    最好的方法是什么?

    2 回复  |  直到 6 年前
        1
  •  3
  •   Scott Boston    6 年前

    尝试:

    df2['GlobalRank'] = df2['flds'].map(df1.set_index('Domain')['GlobalRank']).fillna(100001).astype(int)
    df2
    

    输出:

                        flds   count  GlobalRank
    0             google.com  784565           1
    1          office365.com   36912      100001
    2        doubleclick.net  287232      100001
    3           facebook.com  239662           2
    4        campsystems.com  231264      100001
    5               live.com  211577      100001
    6  googlesyndication.com   19233      100001
    7           linkedin.com  187754           6
    8              apple.com  146298          10
    9              yahoo.com  128401      100001
    

    注意:由于从df1中仅基于df2的一列获取一列,因此可以使用 map 而不是合并。map的输入是使用值的序列映射索引创建的pd.series。

        2
  •  1
  •   Mohit Motwani    6 年前

    您也可以尝试使用右连接 pandas.DataFrame.merge :

    new_df = df1.merge(df2, how = 'right', on = 'domain').drop(columns = ['count']).fillna(100001)
    new_df
    
      global_rank   domain
    0   1.0         google.com
    1   2.0         facebook.com
    2   6.0         linkedin.com
    3   10.0        apple.com
    4   100001.0    office365.com
    5   100001.0    doubleclick.com
    6   100001.0    campsystems.com
    7   100001.0    live.com
    8   100001.0    googlesyndication.com
    9   100001.0    yahoo.com