从 Pandas 高效创建字典的 Pythonic 方法
Pythonic way to efficient create dictionaries from Pandas
我有一个 Pandas 数据框,其中包含列 id
、date_created
、rank_1
、rank_2
、rank_3
。下面显示了 2 行数据框。
id
date_created
rank_1
rank_2
rank_3
2223
3/3/21 3:26
www.google.com
www.yahoo.com
www.ford.com
1112
2/25/21 1:35
www.autoblog.com
www.motor1.com
www.webull.com
我正在尝试为此 df 分配一个新列并将其命名为 rank_dict
,这会将编号 3 分配给 rank_1 URL,编号 2 分配给 rank_2 ] URL 和数字 1 到 rank_3 URL。
所以理想的结果应该是这样的:
id
date_created
rank_1
rank_2
rank_3
rank_dict
2223
3/3/21 3:26
www.google.com
www.yahoo.com
www.ford.com
{www.google.com:3, www.yahoo.com:2, www.ford.com:1}
1112
2/25/21 1:35
www.autoblog.com
www.motor1.com
www.webull.com
{www.autoblog.com:3, www.motor1.com:2, www.webull.com:1}
如果不是 Pandas df,我知道该怎么做。例如,如果我有这些键值列表:
keys = ['www.google.com','www.yahoo.com','www.ford.com']
values = [3, 2, 1]
我可以res_dict = dict(zip(keys, values))
把它变成字典:{'www.google.com': 3, 'www.yahoo.com': 2, 'www.ford.com': 1}
。
但是我想不出一种优雅的方式来在 Pandas df 中创建这个字典。谁能帮帮我?
一种方法是 apply
并使用 enumerate
来获取枚举:
df['rank_dict'] = (df.filter(like='rank_')
.apply(lambda x: {v:3-k for k,v in enumerate(x)}, axis=1)
)
输出:
id date_created rank_1 rank_2 rank_3 rank_dict
0 2223 3/3/21 3:26 www.google.com www.yahoo.com www.ford.com {'www.google.com': 3, 'www.yahoo.com': 2, 'w...'
1 1112 2/25/21 1:35 www.autoblog.com www.motor1.com www.webull.com {'www.autoblog.com': 3, 'www.motor1.com': 2,...'
我有一个 Pandas 数据框,其中包含列 id
、date_created
、rank_1
、rank_2
、rank_3
。下面显示了 2 行数据框。
id | date_created | rank_1 | rank_2 | rank_3 |
---|---|---|---|---|
2223 | 3/3/21 3:26 | www.google.com | www.yahoo.com | www.ford.com |
1112 | 2/25/21 1:35 | www.autoblog.com | www.motor1.com | www.webull.com |
我正在尝试为此 df 分配一个新列并将其命名为 rank_dict
,这会将编号 3 分配给 rank_1 URL,编号 2 分配给 rank_2 ] URL 和数字 1 到 rank_3 URL。
所以理想的结果应该是这样的:
id | date_created | rank_1 | rank_2 | rank_3 | rank_dict |
---|---|---|---|---|---|
2223 | 3/3/21 3:26 | www.google.com | www.yahoo.com | www.ford.com | {www.google.com:3, www.yahoo.com:2, www.ford.com:1} |
1112 | 2/25/21 1:35 | www.autoblog.com | www.motor1.com | www.webull.com | {www.autoblog.com:3, www.motor1.com:2, www.webull.com:1} |
如果不是 Pandas df,我知道该怎么做。例如,如果我有这些键值列表:
keys = ['www.google.com','www.yahoo.com','www.ford.com']
values = [3, 2, 1]
我可以res_dict = dict(zip(keys, values))
把它变成字典:{'www.google.com': 3, 'www.yahoo.com': 2, 'www.ford.com': 1}
。
但是我想不出一种优雅的方式来在 Pandas df 中创建这个字典。谁能帮帮我?
一种方法是 apply
并使用 enumerate
来获取枚举:
df['rank_dict'] = (df.filter(like='rank_')
.apply(lambda x: {v:3-k for k,v in enumerate(x)}, axis=1)
)
输出:
id date_created rank_1 rank_2 rank_3 rank_dict
0 2223 3/3/21 3:26 www.google.com www.yahoo.com www.ford.com {'www.google.com': 3, 'www.yahoo.com': 2, 'w...'
1 1112 2/25/21 1:35 www.autoblog.com www.motor1.com www.webull.com {'www.autoblog.com': 3, 'www.motor1.com': 2,...'