Pandas匹配雄伟的百万df请求d

2024-05-15 10:47:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧df1和df2,分别是majestic million数据和代理请求数据。我正在尝试将排名添加到df2,如果它在majestic million上,如果不是,则使用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

实现这一目标的最佳方式是什么


Tags: 数据comapplefacebookcountgooglepluslinkedin
2条回答

尝试:

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而不是merge。map的输入是一个pd.Series,它是使用序列映射到值的索引创建的

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

相关问题 更多 >