鱼C论坛

 找回密码
 立即注册
查看: 930|回复: 2

[已解决]求大神帮忙python:第一列相同,则对第二列分类统计比例

[复制链接]
发表于 2021-12-25 22:00:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
示例数据:
block10_scaffold_1...alignment2
block10_scaffold_1...alignment2
block10_scaffold_1...alignment2
block10_scaffold_1...alignment2
block10_scaffold_1...alignment2
block10_scaffold_1...alignment2
block10_scaffold_1...alignment2
block10_scaffold_1...alignment2
block10_scaffold_1...alignment2
block10_scaffold_1...alignment2
block10_scaffold_1...alignment2
block10_scaffold_1...alignment2
block10_scaffold_1...alignment315
block10_scaffold_1...alignment665
block10_scaffold_1...alignment665
block10_scaffold_1...alignment665
block10_scaffold_1...alignment665
block10_scaffold_1...alignment665
block10_scaffold_1...alignment665
block10_scaffold_1...alignment665
block10_scaffold_1...alignment665
block12_scaffold_1...alignment2
block12_scaffold_1...alignment2
block12_scaffold_1...alignment2
block12_scaffold_1...alignment2
block12_scaffold_1...alignment2
block12_scaffold_1...alignment2
block12_scaffold_1...alignment2
block12_scaffold_1...alignment2
block12_scaffold_1...alignment2
block12_scaffold_1...alignment2
block12_scaffold_1...alignment2
block12_scaffold_1...alignment2
block12_scaffold_1...alignment2
block12_scaffold_1...alignment2
block12_scaffold_1...alignment664
block12_scaffold_1...alignment664
block12_scaffold_1...alignment664
block12_scaffold_1...alignment664
block12_scaffold_1...alignment664
block12_scaffold_1...alignment664
block12_scaffold_1...alignment664
block12_scaffold_1...alignment664
block12_scaffold_1...alignment664
block12_scaffold_1...alignment664
block12_scaffold_1...alignment664
block12_scaffold_1...alignment664


想要得到的结果:
block10_scaffold_1        total:21        alignment2        12        0.5714        alignment665        8        0.3810        alignment315        1        0.0476       
block12_scaffold_1        total:26        alignment2        14  0.5385        alignment664        12        0.4615

如果第一列相同,则统计第一列的总数,然后统计第二列有几种类型,分别输出在第一列值的后面【统计每个类型个数及占第一列的比例。每行不同类型按占比的大小排列(从大到小)】

感恩
最佳答案
2021-12-26 10:48:20
本帖最后由 傻眼貓咪 于 2021-12-26 11:00 编辑

  1. data = """block10_scaffold_1...alignment2
  2. block10_scaffold_1...alignment2
  3. block10_scaffold_1...alignment2
  4. block10_scaffold_1...alignment2
  5. block10_scaffold_1...alignment2
  6. block10_scaffold_1...alignment2
  7. block10_scaffold_1...alignment2
  8. block10_scaffold_1...alignment2
  9. block10_scaffold_1...alignment2
  10. block10_scaffold_1...alignment2
  11. block10_scaffold_1...alignment2
  12. block10_scaffold_1...alignment2
  13. block10_scaffold_1...alignment315
  14. block10_scaffold_1...alignment665
  15. block10_scaffold_1...alignment665
  16. block10_scaffold_1...alignment665
  17. block10_scaffold_1...alignment665
  18. block10_scaffold_1...alignment665
  19. block10_scaffold_1...alignment665
  20. block10_scaffold_1...alignment665
  21. block10_scaffold_1...alignment665
  22. block12_scaffold_1...alignment2
  23. block12_scaffold_1...alignment2
  24. block12_scaffold_1...alignment2
  25. block12_scaffold_1...alignment2
  26. block12_scaffold_1...alignment2
  27. block12_scaffold_1...alignment2
  28. block12_scaffold_1...alignment2
  29. block12_scaffold_1...alignment2
  30. block12_scaffold_1...alignment2
  31. block12_scaffold_1...alignment2
  32. block12_scaffold_1...alignment2
  33. block12_scaffold_1...alignment2
  34. block12_scaffold_1...alignment2
  35. block12_scaffold_1...alignment2
  36. block12_scaffold_1...alignment664
  37. block12_scaffold_1...alignment664
  38. block12_scaffold_1...alignment664
  39. block12_scaffold_1...alignment664
  40. block12_scaffold_1...alignment664
  41. block12_scaffold_1...alignment664
  42. block12_scaffold_1...alignment664
  43. block12_scaffold_1...alignment664
  44. block12_scaffold_1...alignment664
  45. block12_scaffold_1...alignment664
  46. block12_scaffold_1...alignment664
  47. block12_scaffold_1...alignment664"""

  48. arr = dict()

  49. for each in data.split("\n"):
  50.     a, b = each.split("...")
  51.     if a in arr:
  52.         arr[a][0] += 1
  53.         if(b in arr[a][1]):
  54.             arr[a][1][b] += 1
  55.         else:
  56.             arr[a][1][b] = 1
  57.     else:
  58.         arr[a] = [1, dict()]
  59.         arr[a][1][b] = 1

  60. for each in arr.items():
  61.     key, res = each
  62.     a, b = res
  63.     print(f"{key} total: {a}", end = "\t")
  64.     ans = []
  65.     for elem in b.items():
  66.         k, v = elem
  67.         ans.append((k, v, v/a))
  68.     ans.sort(key = lambda x: x[2], reverse = True)
  69.     [print(f"{k} {v} {q: .4f}", end = "\t") for k, v, q in ans]
  70.     print()
复制代码
  1. block10_scaffold_1 total: 21    alignment2 12  0.5714   alignment665 8  0.3810  alignment315 1  0.0476
  2. block12_scaffold_1 total: 26    alignment2 14  0.5385   alignment664 12  0.4615
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-12-26 10:48:20 | 显示全部楼层    本楼为最佳答案   
本帖最后由 傻眼貓咪 于 2021-12-26 11:00 编辑

  1. data = """block10_scaffold_1...alignment2
  2. block10_scaffold_1...alignment2
  3. block10_scaffold_1...alignment2
  4. block10_scaffold_1...alignment2
  5. block10_scaffold_1...alignment2
  6. block10_scaffold_1...alignment2
  7. block10_scaffold_1...alignment2
  8. block10_scaffold_1...alignment2
  9. block10_scaffold_1...alignment2
  10. block10_scaffold_1...alignment2
  11. block10_scaffold_1...alignment2
  12. block10_scaffold_1...alignment2
  13. block10_scaffold_1...alignment315
  14. block10_scaffold_1...alignment665
  15. block10_scaffold_1...alignment665
  16. block10_scaffold_1...alignment665
  17. block10_scaffold_1...alignment665
  18. block10_scaffold_1...alignment665
  19. block10_scaffold_1...alignment665
  20. block10_scaffold_1...alignment665
  21. block10_scaffold_1...alignment665
  22. block12_scaffold_1...alignment2
  23. block12_scaffold_1...alignment2
  24. block12_scaffold_1...alignment2
  25. block12_scaffold_1...alignment2
  26. block12_scaffold_1...alignment2
  27. block12_scaffold_1...alignment2
  28. block12_scaffold_1...alignment2
  29. block12_scaffold_1...alignment2
  30. block12_scaffold_1...alignment2
  31. block12_scaffold_1...alignment2
  32. block12_scaffold_1...alignment2
  33. block12_scaffold_1...alignment2
  34. block12_scaffold_1...alignment2
  35. block12_scaffold_1...alignment2
  36. block12_scaffold_1...alignment664
  37. block12_scaffold_1...alignment664
  38. block12_scaffold_1...alignment664
  39. block12_scaffold_1...alignment664
  40. block12_scaffold_1...alignment664
  41. block12_scaffold_1...alignment664
  42. block12_scaffold_1...alignment664
  43. block12_scaffold_1...alignment664
  44. block12_scaffold_1...alignment664
  45. block12_scaffold_1...alignment664
  46. block12_scaffold_1...alignment664
  47. block12_scaffold_1...alignment664"""

  48. arr = dict()

  49. for each in data.split("\n"):
  50.     a, b = each.split("...")
  51.     if a in arr:
  52.         arr[a][0] += 1
  53.         if(b in arr[a][1]):
  54.             arr[a][1][b] += 1
  55.         else:
  56.             arr[a][1][b] = 1
  57.     else:
  58.         arr[a] = [1, dict()]
  59.         arr[a][1][b] = 1

  60. for each in arr.items():
  61.     key, res = each
  62.     a, b = res
  63.     print(f"{key} total: {a}", end = "\t")
  64.     ans = []
  65.     for elem in b.items():
  66.         k, v = elem
  67.         ans.append((k, v, v/a))
  68.     ans.sort(key = lambda x: x[2], reverse = True)
  69.     [print(f"{k} {v} {q: .4f}", end = "\t") for k, v, q in ans]
  70.     print()
复制代码
  1. block10_scaffold_1 total: 21    alignment2 12  0.5714   alignment665 8  0.3810  alignment315 1  0.0476
  2. block12_scaffold_1 total: 26    alignment2 14  0.5385   alignment664 12  0.4615
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-26 17:00:52 | 显示全部楼层
感谢帮助,感动.....
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-30 16:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表