代码之家  ›  专栏  ›  技术社区  ›  ChatGPT

如何将[('US',144),('CA',37)]转换为['US',CA']

  •  1
  • ChatGPT  · 技术社区  · 4 年前

    我有客户和国家数据的df。我想数一数这些国家,这样就可以找到排名前五的国家,并将其用作其他地方的过滤器。

    这给了我计数

    countries = collections.Counter(responses_2021['country'].dropna())
    

    这就产生了

    [('US', 144), ('CA', 37), ('GB', 15), ('FR', 15), ('AU', 12)]
    

    这给了我前五名

    countries_top5 = countries.most_common(5)
    

    现在我需要把它转换成一个更简单的结构,这样我就可以做我的过滤器了(这里我只是手动输入,因为这是我前进的唯一方式lol)

    options = ['US', 'CA', 'GB', 'FR', 'AU'] 
    rslt_df = df[df['country'].isin(options)] 
    

    所以,从这个

    [('US',144),('CA',37),('GB',15),('FR',15),('AU',12)]
    

    对这个

    ['US', 'CA', 'GB', 'FR', 'AU'] 
    

    我一开始就试图删除计数

    countries_top5_names = np.delete(countries_top5, 1, 1)
    

    但这会带来收益

    [['US'], ['CA'], ['GB'], ['FR'], ['AU']] 
    

    所以现在我想把它弄平,但我不知道怎么做。

    更好的方法?

    解决方案(感谢下面的@dan04)

    countries_top5_names = [x[0] for x in countries_top5] 
    rslt_df = df[df['country'].isin(countries_top5_names)] 
    
    2 回复  |  直到 4 年前
        1
  •  3
  •   dan04    4 年前

    就拿元素来说吧 [0] 每个元组的。

    >>> data = [('US', 144), ('CA', 37), ('GB', 15), ('FR', 15), ('AU', 12)]
    >>> countries = [x[0] for x in data]
    >>> countries
    ['US', 'CA', 'GB', 'FR', 'AU']
    
        2
  •  0
  •   slavny_coder    4 年前

    你可以尝试更通用的方法来做到这一点。

    data = [('US', 144), ('CA', 37), ('GB', 15), ('FR', 15), ('AU', 12)]
    groups = list(zip(*data))
    print(groups[0])
    print(groups[1])
    

    输出:
    ('US'、'CA'、'GB'、'FR'、'AU')
    (144, 37, 15, 15, 12)