熊猫与雄伟百万df比赛要求df

时间:2018-12-05 17:30:44

标签: python pandas

我有两个具有雄伟百万数据的数据帧df1和具有代理请求数据的df2。我正在尝试将排名添加到df2(如果雄伟的百万排名),如果不是,则使用1000001作为排名。

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 个答案:

答案 0 :(得分:3)

尝试:

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

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

答案 1 :(得分:1)

您也可以使用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