自研数据分析工具——yandas系列二:分析泰坦尼克号沉船事件中的乘客信息表

前言:21年广州荔湾区成了疫情灾区,很多人都没有工作,被居家隔离,感染病毒概率死亡率是0.005%,没有工作死亡率是100%,因此作为普通老百姓,自己开发了一个数据分析工具,叫yandas。

首先我们看看表:

有两张表,A表记录了很多款产品的三个基础字段,分别是产品ID,地区代码和重量:
在这里插入图片描述
B表是运费明细表,这个表结构很“业务”。每行对应着单个地区,不同档位重量,所对应的运费:
在这里插入图片描述
现在,我们想要结合A表和B表,统计出A表每个产品付多少运费,应该怎么实现?

可以先自己思考一分钟图片
在这里插入图片描述
分析:
1、分别读取表1数据,表2数据
2、遍历表1数据,获取每行重量数据和地区代码
3、再遍历表2,判断表2的地区代码和表1的地区代码
4、如果代码相同,就遍历表2表头的重量范围
5、再判断表1的重量在表2的重量范围内,找出所对应的金额

		List<ListOrderedMap<String, Object>> listMap1 = excelUtil.read(f1, a); //表1 id address kg
        List<ListOrderedMap<String, Object>> listMap2 = excelUtil.read(f2, a); //表2 0.5~1
        for(int i = 0 ; i < listMap1.size(); i++){ //遍历表1,获取每个kg
            ListOrderedMap<String, Object> rowData1 = listMap1.get(i);
            String name1 = rowData1.get("name1") + ""; //address
            String name2 = rowData1.get("name2") + ""; //kg
            if (_stringUtils.isNum(name1)) { //address是数据 继续
                System.out.println(name1+" "+name2);
                ListOrderedMap<String, Object> rowData2_1 = listMap2.get(0);
                for (int j = 0; j < listMap2.size(); j++) { //遍历表2 获取代码
                    ListOrderedMap<String, Object> rowData2 = listMap2.get(j);
                    String address2 = rowData2.get("name0") + ""; //address2
                    if(name1.equals(address2)){
                        System.out.println(name1+" "+name2+" "+address2);
                        for (int n = 0; n < rowData2_1.size(); n++) { //遍历表2 表头的0.5~1
                            String name2_1 = rowData2_1.get("name" + n) + "";
                            if (name2_1.contains("~")) {
                                String name2_1_1 = name2_1; //0~0.5
                                String ns[] = name2_1_1.split("~");
                                if (Double.parseDouble(ns[0] + "") < Double.parseDouble(name2) && Double.parseDouble(name2) <= Double.parseDouble(ns[1] + "")) {
                                    String n2 = rowData2.get("name" + n) + "";
                                    System.out.println(name1+" "+name2+" "+address2 + " "+n2);
                                    rowData1.put("name" + (rowData1.size()), n2);
                                }
                            }
                        }
                    }
                }
            }

        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值