喜之狼V6 2022-06-23 00:47 采纳率: 100%
浏览 67
已结题

excel表2 的数据,导入表1,分别计算出数据在表3输出?

excel表2 的数据,逐列导入表1,分别计算出数据在表3输出?

img

  • 写回答

3条回答 默认 最新

  • 溪风沐雪 2022-06-23 09:02
    关注

    给一种编程解决方案,基本思路是把先读取表二,把表二中有数据的列提取出来做为输入数组,根据不同列的输入计算出对比数据列,根据题主给的公式,运算数据前两个为20和40(题主公式中40也是计算出来的,按照公式,这个必然是40,不受其他影响,所以直接给定40),第三个开始需要参考结果列计算,结果列数据通过同一行前三组数据计算得出,编程代码如下,其中test.xlsx为表二,test1.xlsx是结果数据,即表三

    import pandas as pd
    df = pd.read_excel('test.xlsx')
    datas = []
    for c in df.columns:
        lst = [int(d) for d in df[c] if not pd.isna(d)]
        if len(lst)>0:
            datas.append(lst)
    com_datas = []
    for data in datas:
        cd = [data[i+1] if i<len(data)-1 and data[i]==data[i+1]  else data[i] for i in range(len(data))]
        com_datas.append(cd)
    calc_datas = []
    result_datas = []
    for i in range(len(datas)):
        data = datas[i]
        com_data = com_datas[i]
        calc_data = []
        result_data = []
        for j in range(len(data)):
            if j==0:
                calc_data.append(20)
            elif j==1:
                calc_data.append(40)
            else:
                #=IFS(E5=-160,320,E5=-320,640,E5=-640,0,E5=40,80,AND(E4=-40,E5=-40),80,AND(E4<0,E5=-80),160,TRUE,40)
                if result_data[j-1]==-160 or  result_data[j-1]==-320:
                    calc_data.append(result_data[j-1]*-2)
                elif result_data[j-1]==-640:
                    calc_data.append(0)
                elif result_data[j-1]==40 or (result_data[j-1]==-40 and result_data[j-2]==-40):
                    calc_data.append(80)
                elif result_data[j-1]==-80 and result_data[j-2]<0:
                    calc_data.append(160)
                else:
                    calc_data.append(40)
            if j<len(data)-2:
                result_data.append((-1)**(com_data[j]+data[j+2])*calc_data[j])
            else:
                result_data.append(-1*calc_data[j])
        calc_datas.append(calc_data)
        result_datas.append(result_data)
    print(data[1])
    print(com_datas[1])
    print(calc_datas[1])
    print(result_datas[1])
    
    df1 = pd.DataFrame()
    maxlen = max([len(rd) for rd in result_datas])
    for i in range(len(result_datas)):
        while len(result_datas[i])<maxlen:
            result_datas[i].append(float('nan'))
        df1['结果'+str(i+1)] = result_datas[i]
    df1.to_excel('test1.xlsx')
    

    表二:

    img


    表三:

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 7月2日
  • 已采纳回答 6月24日
  • 创建了问题 6月23日

悬赏问题

  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
  • ¥50 400g qsfp 光模块iphy方案
  • ¥15 两块ADC0804用proteus仿真时,出现异常
  • ¥15 关于风控系统,如何去选择
  • ¥15 这款软件是什么?需要能满足我的需求
  • ¥15 SpringSecurityOauth2登陆前后request不一致
  • ¥15 禅道二次开发编辑版本,上传不了发行包