如何基于行Orders数值规则转换表格列数据,批量修改对应条目
实现思路
- 先按
Region维度统计每个车型的订单量阈值标记:筛选Variable = 'Orders'的行,判断每个车型的订单值是否小于100,得到「区域-车型」的需要置零标记 - 遍历所有行,对非
Orders类型的变量行,若对应「区域-车型」命中置零标记,直接将该单元格值改为0
Python Pandas 实现代码
假设你已经将表格读取为DataFrame对象df,可直接运行以下代码:
import pandas as pd # 1. 生成置零标记表:key为Region,value对应各车型是否需要置零的布尔值 flag_df = df[df['Variable'] == 'Orders'].set_index('Region')[['Audi', 'Porsche']] < 100 # 2. 逐车型逐区域匹配规则修改值 for car_brand in ['Audi', 'Porsche']: for region in flag_df.index: if flag_df.loc[region, car_brand]: df.loc[(df['Region'] == region) & (df['Variable'] != 'Orders'), car_brand] = 0
SQL 实现代码
如果数据存储在数据库表中(表名假设为car_sales),可通过窗口函数实现:
SELECT Region, Variable, CASE WHEN Variable != 'Orders' AND Audi_orders < 100 THEN 0 ELSE Audi END AS Audi, CASE WHEN Variable != 'Orders' AND Porsche_orders < 100 THEN 0 ELSE Porsche END AS Porsche FROM ( SELECT *, MAX(CASE WHEN Variable = 'Orders' THEN Audi END) OVER (PARTITION BY Region) AS Audi_orders, MAX(CASE WHEN Variable = 'Orders' THEN Porsche END) OVER (PARTITION BY Region) AS Porsche_orders FROM car_sales ) t
输出结果
两种实现方式最终输出结果完全匹配预期:
| Region | Variable | Audi | Porsche |
|---|---|---|---|
| Australia | Orders | 5000 | 20 |
| Australia | Price | 50000 | 0 |
| Australia | Color | red | 0 |
| France | Orders | 99 | 100 |
| France | Price | 0 | 100000 |
| France | Color | 0 | blue |
内容的提问来源于stack exchange,提问作者ruedi
相关产品推荐
相关产品推荐

