如何移除带分数的商品行并将销售额合并至对应商品行
处理POS报表中带分数的商品合并问题
直接上新手能看懂的实操步骤:
1. 导入工具并加载数据
先导入pandas,然后把你的POS数据转换成DataFrame(如果是从Excel/CSV文件读取,替换成pd.read_excel()或pd.read_csv()即可):import pandas as pd # 示例数据,和你的格式完全匹配,替换成你自己的数据源就行 data = { 'Item': ['AIR GIN', 'AIR GIN 1/3', 'AIR VODKA', 'AIR VODKA 1/2'], 'Outlet1': [162.0, None, 468.0, None], 'Outlet2': [None, None, None, None], 'Outlet3': [189.0, None, 585.0, 18.0], 'Outlet4': [54.0, 9.0, 144.0, None] } df = pd.DataFrame(data, index=[2,3,4,5])2. 提取不带分数的纯净商品名
用正则表达式去掉Item列末尾的数字/数字后缀,生成一个临时列存基础商品名:df['Base_Item'] = df['Item'].str.replace(r' \d/\d$', '', regex=True)这里的正则
\d/\d$专门匹配“空格+数字/数字”的结尾部分,直接替换为空字符串,就能得到不带拆分标记的商品名。3. 按商品名分组合并销售额
按纯净商品名分组,对各个门店的销售额求和,再整理成你要的格式:# 分组求和,保留原有的NaN(如果一组全是NaN,求和后还是NaN) merged_df = df.groupby('Base_Item')[['Outlet1', 'Outlet2', 'Outlet3', 'Outlet4']].sum(min_count=1).reset_index() # 把临时列改回原来的Item列名 merged_df.rename(columns={'Base_Item': 'Item'}, inplace=True) # 调整索引和你的示例输出一致(可选,不想调可以直接跳过这行) merged_df.index = merged_df.index + 24. 查看最终结果
打印merged_df就能得到和你期望完全一致的输出:Item Outlet1 Outlet2 Outlet3 Outlet4 2 AIR GIN 162.0 NaN 189.0 63.0 3 AIR VODKA 468.0 NaN 603.0 144.0
内容的提问来源于stack exchange,提问作者Terry Morin
相关产品推荐
相关产品推荐

