python数据透视表

输出数据透视表,行序号为班级,查考科目1中不同科目的均分,并将缺失值填充为缺考

这个要看你的原始数据,按照我的理解,这个其实是纵表转横表,可以用 pandas 实现

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7536755
  • 你也可以参考下这篇文章:Python中利用正则表达式用逗号分割数据,但是忽略引号中的逗号的方法
  • 同时,你还可以查看手册:python- 使用二进制数据记录格式 中的内容
  • 除此之外, 这篇博客: python实现一行代码打印九九乘法表,以及涉及到的知识点详解中的 关于编写思路以及涉及到的知识点详解 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 在这里插入图片描述这里要涉及到两个for循环的嵌套,分别是x和y,如图所示。首先先确定输出的格式:
    在这里插入图片描述
    用代码形式为:

    '%dx%d=%d  ' % (x , y , x*y) 
    

    关于python中“%”的使用,详见下方知识点1:关于%
    然后又了解了列表推导式(详见下方知识点2列表推导式),实现了打印九九乘法表的全部内容,写出了下行所示代码:

    '%dx%d=%d' % (x , y , x*y)  for y in range(1,10) for x in range(1,y+1)
    

    因为考虑到每个等式之间有空格,并且还要换行,所以这里涉及到了join函数,详见下方知识点3:关于join函数

    另外还有一个问题,因为使用“%字符串格式化处理”,它的结果是生成一个新的字符串,所以运行出来后所有的乘法公式是以一个字符串显示的,以一列形式输出,而九九乘法表是以阶梯状的形式呈现的,所以,这里出了问题。结合join函数我分析了一下之后明白了:两个等式之间的空格是随着x的变化而出现的,换行符是与y的值有关,所以,我通过join函数分别将“\t”与x连接,“\n”与y连接,这样的话,就要先执行x层循环,再执行y循环,于是得到以下最终代码

    '\n'.join(['  '.join('%dx%d=%d  ' % (x , y , x*y)   for x in range(1,y+1)) for y in range(1,10)])
    
  • 您还可以看一下 jeevan老师的Python量化交易,大操手量化投资系列课程之内功修炼篇课程中的 基础编程之股票行情构造小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    我可以使用pandas库来实现Python数据透视表的功能。具体步骤如下:

    1.导入需要用到的库

    import pandas as pd
    

    2.将数据读入Pandas DataFrame

    # 示例数据为每个班级学生的考试成绩表格,每行表示一个学生,每列表示一个科目
    score_data = {'Class': ['A', 'B', 'A', 'B', 'C', 'C'], 
                  'Math': [50, 70, 80, 65, 75, 85], 
                  'English': [60, 80, 70, 75, 65, 95], 
                  'Chinese': [80, 85, 90, 75, 70, 85]}
    df = pd.DataFrame(score_data)
    

    3.使用Pandas的pivot_table方法生成数据透视表

    # 行为班级,列为科目,值为平均成绩
    pivot_df = pd.pivot_table(df, index='Class', values=['Math', 'English', 'Chinese'], aggfunc='mean')
    # 如果有缺失值需要填充为"缺考"
    pivot_df.fillna('缺考', inplace=True)
    

    4.输出生成的数据透视表

    print(pivot_df)
    

    完整代码如下:

    import pandas as pd
    
    score_data = {'Class': ['A', 'B', 'A', 'B', 'C', 'C'], 
                  'Math': [50, 70, 80, 65, 75, 85], 
                  'English': [60, 80, 70, 75, 65, 95], 
                  'Chinese': [80, 85, 90, 75, 70, 85]}
    df = pd.DataFrame(score_data)
    
    pivot_df = pd.pivot_table(df, index='Class', values=['Math', 'English', 'Chinese'], aggfunc='mean')
    pivot_df.fillna('缺考', inplace=True)
    
    print(pivot_df)