首页 > 其他分享 >将表格压缩为一行 进行统计 以供匹配

将表格压缩为一行 进行统计 以供匹配

时间:2023-08-19 19:31:37浏览次数:32  
标签:匹配 表格 zip df list 以供 arg fun columns



class Class_test:
    def __init__(self):
        self.fun_5_1()
    
    # 若无则报错AttributeError: 'Class_test' object has no attribute 'fun_zip'
    def fun_zip(
        self,
        df_arg=pd.DataFrame(),
        bool_arg=False
    ):
        # 每列元素打包
        zipped = zip(*[df_arg.iloc[i] for i in range(df_arg.shape[0])])
        # 是否包含标题
        if bool_arg:
            list_zip = [(col_name, *row) for col_name, row in zip(df_arg.columns, zipped)]
        else:
            list_zip = [tuple(row) for row in zipped]
        return list_zip
    
    def fun_columns(
        self,
        list_columns=[str(i)+'_重量' if int(i[3])//2 else i for i in ['col'+str(j) for j in range(3)]],
        str_keyword='重量',
        str_suffix='合计'
    ):
        dict_columns={
            key: value for key, value in zip(
                list_columns,
                [
                    str(z) + str(str_suffix)
                    if str(str_keyword) in str(z)
                    else None
                    for z in list_columns
                ]
            )
        }
        return dict_columns
    
    def fun_5_1(self):
        self.dict_columns = self.fun_columns()
        
    def fun_sum(
        self,
        df_arg=pd.DataFrame(columns=['col0', 'col1', 'col2_重量']),
        int_arg=0,
        bool_on=False,
        list_on=['column_to_merge_on'],
        list_LookupValue=['lookup_value']
    ):
        # 生成1行表格
        # 增加合计列,填入合计重量
        list_values = [value for value in self.dict_columns.values() if value is not None]
        df_zip_arg = pd.DataFrame(
            data={
                key: str(value) for key, value in zip(df_arg.columns, self.fun_zip(df_arg))
            },
            index=[int_arg]
        )
        df_zip_arg = pd.concat(
            objs=[
                df_zip_arg, 
                pd.DataFrame(columns=list_values)
            ],
            axis=1
        )
        if df_arg.shape[0] > 0:
            for value in list_values:
                df_zip_arg.loc[int_arg, value] = df_arg.loc[
                    :, [k for k, v in self.dict_columns.items() if v == value][0]
                ].sum()
        
        # 如果需要新增str_on列以供匹配
        if bool_on:
            df_zip_arg = pd.concat(
                objs=[
                    pd.DataFrame(columns=list_on),
                    df_zip_arg
                ],
                axis=1
            )
            if df_arg.shape[0] > 0:
                dict_on = {k: v for k, v in zip(list_on, list_LookupValue)}
                for key in dict_on.keys():
                    df_zip_arg.loc[int_arg, key] = [v for k, v in dict_on.items() if k == key][0]
        
        return df_zip_arg
obj_test = Class_test()  # 若无括号则报错TypeError: Class_test.fun_sum() missing 1 required positional argument: 'self'
obj_test.fun_sum(pd.DataFrame([[1,1,1],[2,2,2],[3,3,3]],columns=['col0', 'col1', 'col2_重量']))
obj_test.fun_sum(pd.DataFrame(columns=['col0', 'col1', 'col2_重量']))
obj_test.fun_sum(pd.DataFrame([[1,1,1],[2,2,2],[3,3,3]],columns=['col0', 'col1', 'col2_重量']), bool_on=True)
obj_test.fun_sum(pd.DataFrame(columns=['col0', 'col1', 'col2_重量']), bool_on=True)

标签:匹配,表格,zip,df,list,以供,arg,fun,columns
From: https://blog.51cto.com/u_16055028/7151654

相关文章

  • Hibernate文字与格式化字符串不匹配错误
    今天这个呢,主要是在使用Hibernate的时候遇到过这个问题,想着别人可能也会遇到这个问题,那么就简单的来记录一下问题的产生以及解决方案。事情的起因是做一个需求,然后测试反馈说这个有个功能报错阻断流程了,让抽时间排查一下,我一开始以为是数据问题,后来我自己环境上尝试了一下,也的确......
  • 国际多语言出海商城源码/返佣产品自动匹配拼单商城源码
    源码介绍:国际多语言出海商城返佣产品自动匹配订单拼单商城源码,8国多语言出海拼单商城。此网站是很多巴西客户定制的原型,已投放运营符合当地本地化。多语言商城返利返佣投资理财派单自带余额宝,采取全新支付端口,后台语音提醒,客服中心改造豪华页面,赠送客服系统。后台釆取全新框架,余额......
  • KMP 字符串匹配 学习笔记
    前言最近才发现自己写了后缀数组,但并没有其他的字符串算法,今天先把\(KMP\)字符串匹配先讲一下。算法核心对于字符串匹配,最朴素的方法就是一个字符一个字符地匹配,找到不同的就直接换一个地方匹配。我们先来看一组样例:\(ababababe\)\(ababe\)对于这组样例,暴力的方法就是直......
  • 两步实现springBoot导出带动态表格的word docx文档
    1.第一步导入poi依赖<!--ApachePOI--><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency>......
  • pandas生成表格: 字典键值列表需对齐,而二维表格无此要求 键值需至少有一个为列表,否
    生成表格:字典键值列表需对齐,而二维表格无此要求键值需至少有一个为列表,否则需指定index,否则ValueErrordf_test=pd.DataFrame({'a':[1,2],'b':[3,None]})#生成表格:#字典键值列表需对齐,而二维表格无此要求#键值需至少有一个为列表,否则需指定index,否则ValueError:If......
  • PHP正则表达式匹配教程
    一、什么是正则表达式正则表达式是一种用于搜索、匹配、替换某种文本的字符串模式,常用于处理文本数据、校验输入数据等。在PHP中,可以使用preg系列函数(preg_match、preg_replace等)处理正则表达式。二、正则表达式语法正则表达式语法包含了一些特定的字符和语法规则,常用的语法规则......
  • ElementUI——vue2+element-ui 2.x的动态表格和表单
    前言一个基于vue2.x+element-ui2.x版本的项目,里面都是CURD的东西,但是前人并未封装组件,而是直接CV,现在要新增一个大模块的功能,就想着封装个组件,后面再基于这个组件对老项目进行改造;虽然是一个大模块,但是功能还是比较简单的,结构如下;内容?>这纯粹是个简单的DEMO,如果你需要......
  • C++函数参数匹配规则
    C++函数参数匹配1单个参数匹配voidf();//f1voidf(int);//f2voidf(int,int);//f3voidf(double,double=3.14);//f4intmain(){f(5.6);//调用f4return0;}candidatefunctions:函数名称相同(f1,f2,f3,f4都是)。viablefunctions:参数个数相同(......
  • [Lua] IT技术熟练度生成器 | 根据活动记录生成md表格 | 自创
    IT技术熟练度v1.0为衡量个人能力水平自创的一套评分机制,根据时间、代码行数、基础理论三个变量生成。最近在学lua,正好练下基本功。效果可见个人介绍|代码统计-小能日记-博客园(cnblogs.com)life.lua记录自己每日的IT活动,main.lua程序根据life.lua生成文件output.md......
  • 栈的应用--括号匹配问题
    博客地址:https://www.cnblogs.com/zylyehuo/#-*-coding:utf-8-*-classStack:def__init__(self):self.stack=[]defpush(self,element):self.stack.append(element)defpop(self):returnself.stack.pop()defge......