0
点赞
收藏
分享

微信扫一扫

# yyds干货盘点 # 盘点一个Pandas实战案例

大家好,我是Python进阶者。

一、前言

前几天在Python最强王者交流群【钟爱一生】问了一个Pandas库实战的问题。问题如下:

各位大佬,这个得到的结果怎么没按包含数量和金额的列名排序后移动到[发料仓库,1级物料类别,2级物料类别,3级物料类别,4级物料类别,5级物料类别,物料长代码,物料名称,规格型号 单位(基本),单价,仓库分类]之后顺序。

代码如下:

# 创建列名顺序列表
column_order = [
    "发料仓库", "1级物料类别", "2级物料类别", "3级物料类别", "4级物料类别", "5级物料类别",
    "物料长代码", "物料名称", "规格型号", "单位(基本)", "单价", "仓库分类"
]

# 提取包含数量和金额的列名
amount_and_amount_columns = [
    col for col in stock_capital.columns
    if "数量" in col or "金额" in col
]

# 重新排序数据框列的顺序
new_columns = column_order + amount_and_amount_columns
stock_capital = stock_capital.reindex(columns=new_columns)

二、实现过程

这里【瑜亮老师】给了一个思路:你是要包含数量和金额的列排在column_order后面,先不说列名的问题,就先说这个排序,你自己要先确定一下:"2024年1月份结存数量" ,"9月份结存金额", "2022年12月份结存数量" ,"对比10月份数量差异", "对比2022年12月份金额差异"这怎么排序。

# yyds干货盘点 # 盘点一个Pandas实战案例_Python

后来修改后,就能顺利地得到预期的结果了。

column_order = ['发料仓库', '1级物料类别', '2级物料类别', '3级物料类别', '4级物料类别', '5级物料类别', '物料长代码', '物料名称', '规格型号', '单位(基本)', '单价', '仓库分类']
    # 提取包含数量和金额的列
    amount_and_amount_columns = [col for col in stock_capital.columns if "数量" in col or "金额" in col]

    # 定义自定义排序函数
    def custom_sort(col):
        # 定位数字(年份和月份)
        numbers = re.findall(r'\d+', col)
        year = int(numbers[0]) if numbers else 0
        month = int(numbers[1]) if len(numbers) > 1 else 0
        # 数量或金额在排序中的权重,数量 > 金额
        type_weight = -1 if "数量" in col else 0
        # 对比差异的权重,对比 < 无对比
        diff_weight = -1 if "对比" in col else 0
        # 返回排序键
        return (year, month, diff_weight, type_weight)

    # 按照自定义排序函数对列名进行排序
    amount_and_amount_columns_sorted = sorted(amount_and_amount_columns, key=custom_sort)

    # 将已排序的列名添加到column_order列表中
    column_order.extend(amount_and_amount_columns_sorted)
    stock_capital = stock_capital.reindex(columns=column_order)

# yyds干货盘点 # 盘点一个Pandas实战案例_Python_02

如果你也有类似这种Python相关的小问题,欢迎随时来交流群学习交流哦,有问必答!

三、总结

大家好,我是皮皮。这篇文章主要盘点了一个Pandas数据处理实战的问题,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。

最后感谢粉丝【钟爱一生】提出的问题,感谢【瑜亮老师】给出的思路,感谢【莫生气】等人参与学习交流。

【提问补充】温馨提示,大家在群里提问的时候。可以注意下面几点:如果涉及到大文件数据,可以数据脱敏后,发点demo数据来(小文件的意思),然后贴点代码(可以复制的那种),记得发报错截图(截全)。代码不多的话,直接发代码文字即可,代码超过50行这样的话,发个.py文件就行。

# yyds干货盘点 # 盘点一个Pandas实战案例_Python基础_03

举报

相关推荐

0 条评论