HHmy4477 2022-05-28 01:24 采纳率: 100%
浏览 296
已结题

python 怎么对数据进行分类汇总

  • 问题是这样的:“我们导出了豆瓣电影排名的 top250,现要统计不同导演所导演的电影在榜单中的数量,按照导演的电影数量排序,将导演的电影数量大于等于 3 的导演以及其导演的电影,使用 print 函数输出到屏幕。要求格式化对齐输出。”

  • 问题相关代码
    import pandas as pd
    df=pd.read_excel('豆瓣电影排行榜.xlsx')#导入数据
    lis1=df['导演'].drop_duplicates().values.tolist()#取出导演存入列表
    lis2=df['影名'].drop_duplicates().values.tolist()#取出影名存入列表
    lis=[]
    lis4=[]
    #按导演分类,对导演字段进行计数,存为字典
    df_count=dict(df.groupby('导演',)['导演'].count())
    #取出计数后的导演和影名分别存入列表
    dr=list(df_count.keys())
    dn=list(df_count.values())
    n=len(df_count)#175
    #将电影数大于等于3的导演和影名存入新列表L
    for i in range(n):
    lis4.append([lis1[i],lis2[i]])
    if dn[i]>=3:

      lis.append([dr[i],dn[i]])
    

    #对新列表L按电影数降序排序
    L=sorted(lis,key=lambda x:(x[1]),reverse=True)
    #把列表转为字典,便于之后存入每个导演对应的电影
    dic=dict(L)
    #建立一个与L长度相同的列表,用于存电影
    movie=[i for i in range(len(L))]
    #尝试把每个电影数大于等于3的导演导的电影存入字典的值里
    for keys in dic:
    for i in range(n):

      for j in range(len(L)):
          if lis4[i][0]==L[j][0]:
              movie[j]+=lis4[i][1]
    
  • 运行结果及报错内容
    TypeError: unsupported operand type(s) for +=: 'int' and 'str'

    我的解答思路和尝试过的方法

    我想使用“+=”方法把多部电影存入一个导演对应的value中,但是运行报错(如上)

  • 我想要达到的结果
    因为字典中的每个导演对应不止一部电影,但是在上面的for循环中我只能做到每个导演对应1部电影,其他的属于那个导演的电影没办法加入到对应的value中去,“+=”也没办法使用,没有头绪了

  • 数据和实验指导在这里
    链接:https://pan.baidu.com/s/11Db8wYGhQNEj2zUV0mCkMw?pwd=1234
    提取码:1234

希望哪位朋友可以给予解答 ^ 0 ^(有更简单的方法当然更好,个人感觉自己的办法比较麻烦,但是想不到其他办法>_<)

  • 写回答

1条回答 默认 最新

  • Hann Yang 全栈领域优质创作者 2022-05-28 08:06
    关注
    import pandas as pd
    
    df = pd.read_excel('豆瓣电影排行榜.xlsx')
    lis1 = df['导演'].tolist()
    lis2 = df['影名'].tolist()
    
    dic1,dic2 = {},{}
    
    for i in lis1:
        dic1[i] = dic1.get(i, 0) + 1
    
    for i,n in enumerate(lis1):
        dic2[n] = dic2.get(n, []) + [lis2[i]]
    
    for k,v in sorted(dic1.items(),key=lambda x:x[1], reverse=True):
        if v>=3:
            print(f"【导演】:{k}\n【片数】:{v}\n【作品】:{' '.join(dic2[k])}\n")
    

    输出结果:

    【导演】:克里斯托弗·诺兰
    【片数】:7
    【作品】:星际穿越 蝙蝠侠:黑暗骑士 致命魔术 追随 盗梦空间 蝙蝠侠:黑暗骑士崛起 记忆碎片

    【导演】:宫崎骏
    【片数】:7
    【作品】:龙猫 天空之城 幽灵公主 风之谷 哈尔的移动城堡 魔女宅急便 千与千寻

    【导演】:史蒂文·斯皮尔伯格
    【片数】:6
    【作品】:辛德勒的名单 E.T. 人工智能 拯救大兵瑞恩 猫鼠游戏 幸福终点站

    【导演】:王家卫
    【片数】:5
    【作品】:重庆森林 花样年华 阿飞正传 春光乍泄 东邪西毒

    【导演】:大卫·芬奇
    【片数】:4
    【作品】:搏击俱乐部 本杰明·巴顿奇事 七宗罪 消失的爱人

    【导演】:昆汀·塔伦蒂诺
    【片数】:4
    【作品】:罪恶之城 低俗小说 无耻混蛋 被解救的姜戈

    【导演】:李安
    【片数】:4
    【作品】:少年派的奇幻漂流 饮食男女 断背山 喜宴

    【导演】:彼得·杰克逊
    【片数】:3
    【作品】:指环王3:王者无敌 指环王1:魔戒再现 指环王2:双塔奇兵

    【导演】:刘镇伟
    【片数】:3
    【作品】:大话西游之大圣娶亲 大话西游之月光宝盒 射雕英雄传之东成西就

    【导演】:朱塞佩·托纳多雷
    【片数】:3
    【作品】:天堂电影院 西西里的美丽传说 海上钢琴师

    【导演】:吴宇森
    【片数】:3
    【作品】:变脸 纵横四海 英雄本色

    【导演】:弗朗西斯·福特·科波拉
    【片数】:3
    【作品】:教父 教父2 教父3

    【导演】:理查德·柯蒂斯
    【片数】:3
    【作品】:时空恋旅人 海盗电台 真爱至上

    【导演】:詹姆斯·卡梅隆
    【片数】:3
    【作品】:泰坦尼克号 终结者2:审判日 阿凡达

    【导演】:姜文
    【片数】:3
    【作品】:阳光灿烂的日子 鬼子来了 让子弹飞

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月5日
  • 已采纳回答 5月28日
  • 创建了问题 5月28日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效