我有两个具有雄伟百万数据的数据帧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
完成此任务的最佳方法是什么?
答案 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