如何将数据转换为带有统计信息的特定格式?

ID:21136 / 打印

如何将数据转换为带有统计信息的特定格式?

如何将数据转换为带有统计信息的特定格式

你遇到的问题是将类似以下形式的数据转换为新格式:

data = [     ('连衣裙', '白色', 's', 1),     ('连衣裙', '白色', 's', 1),     ('连衣裙', '黑色', 'm', 1),     ('裤子', '白色', 's', 1), ]

目标格式需要统计相同标题下的颜色和尺码数量,并在最后一个字段中显示总数,并根据总数从高到低进行排序:

result = [     ('连衣裙', '白色', 's', 2, 3),     ('连衣裙', '白色', 'm', 1, 3),     ('裤子', '白色', 's', 1, 1), ]

解决方法如下:

  1. 使用counter来计算每个(标题, 颜色, 尺码)元组的数量:

    from collections import counter  counter = counter(tuple(x[:-1]) for x in data)
    counter = {  ('连衣裙', '白色', 's'): 2,  ('连衣裙', '黑色', 'm'): 1,  ('裤子', '白色', 's'): 1, }
  2. 计算每个标题的总数:

    title_counts = counter(x[0] for x in data)
    title_counts = {  '连衣裙': 3,  '裤子': 1, }
  3. 构建结果列表,包含每个元组、其数量以及对应的标题总数:

    result = [(key[0], key[1], key[2], count, title_counts[key[0]]) for key, count in counter.items()]
  4. 根据总数从高到低排序:

    result.sort(key=lambda x: (-x[4], x[0], x[1], x[2]))

最后,你会得到所需的输出:

print(result)
[('连衣裙', '白色', 'S', 2, 3), ('连衣裙', '黑色', 'M', 1, 3), ('裤子', '白色', 'S', 1, 1)]
上一篇: Go语言中为什么函数闭包会返回相同的值?如何解决?
下一篇: 如何使用Pandas高效计算当前行以上比当前行值大的个数?

作者:admin @ 24资源网   2025-01-14

本站所有软件、源码、文章均有网友提供,如有侵权联系308410122@qq.com

与本文相关文章

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。