【问题标题】:Pythonic way to efficient create dictionaries from Pandas从 Pandas 高效创建字典的 Pythonic 方法
【发布时间】:2021-03-13 02:07:50
【问题描述】:

我有一个 Pandas 数据框,其中包含 iddate_createdrank_1rank_2rank_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 中执行此字典创建的优雅方法。谁能帮帮我?

【问题讨论】:

    标签: python pandas dictionary ranking recommendation-engine


    【解决方案1】:

    一种方法是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,...'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-19
      • 1970-01-01
      • 2019-02-10
      • 2018-04-28
      • 2015-10-29
      • 1970-01-01
      • 1970-01-01
      • 2016-01-15
      相关资源
      最近更新 更多