首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

盘点一个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月份金额差异"这怎么排序。

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

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)

  • 发表于:
  • 原文链接https://page.om.qq.com/page/O_6_27WVWhFtfMxlNc2wYM-g0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券