随记-pandas 数据处理(多表合并,求和)

在这里插入图片描述
需求描述:如上图,

  1. 将多张表合并
  2. 选择指定行,进行转置
  3. 加入加分表 和 扣分表,并计算总分
  4. 判断指定列的和是否大于阈值。大于阈值,则指定列的值翻倍计入总分,小于阈值,则指定列的值减去一个值计入总分。

分析:

  1. 将多张表放在指定的目录下,方便区分
  2. 将指定行参数化,方便修改
  3. 和1 一样通过路径区分加分表 和 扣分表,先不计算总分,计算步骤往后放
  4. 指定行参数化,阈值参数化,扣分参数化,计算总分,同时处理3 所对应的扣分表

conf.py

# coding=utf-8
"""
@FileName:conf
@ProjectName:
@CreateTime:2022/8/15 下午8:07
@Author:fangqingyou

"""

# 初始数据目录,存放需要合并的表格
dir_init_data = "./data"

# 加分表目录
dir_extra_data = "./data_add"

# 扣分表目录
dir_extra_data_sub = "./data_sub"

# 转置的行
t_line = ["英语", "语文", "物理"]

# 计算阈值的行
threshold_line = ["历史", "生物"]

# 阈值
threshold = 110

# 扣分,小于阈值,则扣减 sub_value
sub_value = 20

pandas_demo.py

# coding=utf-8
"""
@FileName:pandas_demo
@ProjectName:
@CreateTime:2022/8/15 下午7:50
@Author:fangqingyou

"""
import os

import pandas as pd

from conf import dir_init_data, t_line, dir_extra_data, dir_extra_data_sub, threshold_line, sub_value, threshold

"""

读取data下的表格进行合并 初始表

读取配置,转置特定行形成 表1

从extra_data 读取数据
从extra_data_sub 读取数据
得到加分表和减分表

从初始表判断历史和生物的和是否大于110,
大于则各翻倍计入总分,小于则各减20计入总分

得到最终表

"""


def merge_init_data():
    """
    读取data下的表格进行合并

    :return:
    """

    # 遍历目录获取目标文件
    file_list = []
    for root, dirs, files in os.walk(dir_init_data):
        file_list = [root+"/"+file for file in files]

    # 读取数据
    data_frame_list = []
    for file in file_list:
        data_frame = pd.read_excel(file, index_col=0)
        data_frame_list.append(data_frame)

    # 合并数据
    data_frame = pd.concat(data_frame_list, axis=1)
    return data_frame


def merge_data_add_sub():
    """
    得到加分表的合并
    & 扣分表的合并

    :param table:
    :return:
    """

    # 遍历目录获取目标文件,加分数据
    data_add_list = []
    for root, dirs, files in os.walk(dir_extra_data):
        data_add_list = [root+"/"+file for file in files]

    # 遍历目录获取目标文件,减分数据
    data_sub_list = []
    for root, dirs, files in os.walk(dir_extra_data_sub):
        data_sub_list = [root+"/"+file for file in files]

    # 读取数据,加分
    df_add_list = []
    for file in data_add_list:
        data_frame = pd.read_excel(file, index_col=0)
        df_add_list.append(data_frame)

    # 读取数据,减分
    df_sub_list = []
    for file in data_sub_list:
        data_frame = pd.read_excel(file, index_col=0)
        df_sub_list.append(data_frame)

    # 合并 加分 减分
    df_add = pd.concat(df_add_list, axis=1)
    df_sub = pd.concat(df_sub_list, axis=1)

    return df_add, df_sub


def process_threshold(table):
    """
    处理阈值

    :param table:
    :return:
    """
    df_threshold = table.loc[threshold_line, :].T
    df_threshold_update = df_threshold.apply(lambda x: x*2 if x.sum() > threshold else x-sub_value, axis=1)
    df_threshold_update.columns = [element+"改" for element in df_threshold_update.columns]

    return df_threshold_update


if __name__ == '__main__':

    # 合并表
    merge_table_init = merge_init_data()

    # 转置
    merge_table_t = merge_table_init.loc[t_line, :].T

    # 得到 加分表 和 扣分表
    df_add, df_sub = merge_data_add_sub()

    # 扣分表的处理,先加后减,所以扣分表 * 2
    ser_sub = df_sub.apply(lambda x: x.sum() * 2, axis=1)

    # 处理阈值
    df_threshold_update = process_threshold(merge_table_init)

    # 合并表格, 转置表  加分表 扣分表 阈值表 合并
    temp_result = merge_table_t.join([df_add, df_sub, df_threshold_update], how="left")

    # 计算总分,行求和 - ser_sub
    temp_result["总分"] = temp_result.apply(lambda x: x.sum(), axis=1) - ser_sub

    print()


到此结 DragonFangQy  2022.8.16

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值