python实例分析:每周上新款销售表现呈现
业务场景:已知款的上新周数、上新量、销售1周表现====>如何在每一周呈现所有上新款的订单和销售信息?
换算理解:python代码实现:表1转换为表2;其中款的地方会替换成每一张款图片进行呈现
表1如下:
LEVEL1_1 | Launch Season | SUBCLASS | ART | YW | ORDER | ROS1W |
---|---|---|---|---|---|---|
BAGS | L2 | A | A1 | 202501 | 1000 | 2.52 |
BAGS | L2 | A | A2 | 202501 | 1000 | 2.52 |
BAGS | L2 | A | A3 | 202501 | 1000 | 2.52 |
BAGS | L2 | A | A4 | 202501 | 1000 | 2.52 |
BAGS | L2 | A | A5 | 202502 | 1000 | 2.52 |
BAGS | L2 | A | A6 | 202502 | 1000 | 2.52 |
BAGS | L2 | A | A7 | 202503 | 1000 | 2.52 |
BAGS | L2 | A | A8 | 202503 | 1000 | 2.52 |
BAGS | L2 | A | A9 | 202503 | 1000 | 2.52 |
BAGS | L2 | B | B1 | 202501 | 1000 | 2.52 |
BAGS | L2 | B | B2 | 202501 | 1000 | 2.52 |
BAGS | L2 | B | B3 | 202501 | 1000 | 2.52 |
BAGS | L2 | B | B4 | 202501 | 1000 | 2.52 |
BAGS | L2 | B | B5 | 202502 | 1000 | 2.52 |
BAGS | L2 | B | B6 | 202502 | 1000 | 2.52 |
BAGS | L2 | B | B7 | 202503 | 1000 | 2.52 |
BAGS | L2 | B | B8 | 202503 | 1000 | 2.52 |
BAGS | L2 | B | B9 | 202503 | 1000 | 2.52 |
表2如下:
Launch Season | SUBCLASS | 202501 | 202501 | 202502 | 202502 | 202503 | 202503 |
---|---|---|---|---|---|---|---|
L2 | A | A1 | order:1000 ros1w:2.52 | A5 | order:1000 ros1w:2.52 | A7 | order:1000 ros1w:2.52 |
L2 | A | A2 | order:1000 ros1w:2.52 | A6 | order:1000 ros1w:2.52 | A8 | order:1000 ros1w:2.52 |
L2 | A | A3 | order:1000 ros1w:2.52 | - | - | A9 | order:1000 ros1w:2.52 |
L2 | A | A4 | order:1000 ros1w:2.52 | - | - | - | - |
L2 | B | B1 | order:1000 ros1w:2.52 | B5 | order:1000 ros1w:2.52 | B7 | order:1000 ros1w:2.52 |
L2 | B | B2 | order:1000 ros1w:2.52 | B6 | order:1000 ros1w:2.52 | B8 | order:1000 ros1w:2.52 |
L2 | B | B3 | order:1000 ros1w:2.52 | - | - | B9 | order:1000 ros1w:2.52 |
L2 | B | B4 | order:1000 ros1w:2.52 | - | - | - | - |
code实现:
# 原始数据
data = [
['BAGS', 'L2', 'A', 'A1', 202501, 1000, 2.52],
['BAGS', 'L2', 'A', 'A2', 202501, 1000, 2.52],
['BAGS', 'L2', 'A', 'A3', 202501, 1000, 2.52],
['BAGS', 'L2', 'A', 'A4', 202501, 1000, 2.52],
['BAGS', 'L2', 'A', 'A5', 202502, 1000, 2.52],
['BAGS', 'L2', 'A', 'A6', 202502, 1000, 2.52],
['BAGS', 'L2', 'A', 'A7', 202503, 1000, 2.52],
['BAGS', 'L2', 'A', 'A8', 202503, 1000, 2.52],
['BAGS', 'L2', 'A', 'A9', 202503, 1000, 2.52],
['BAGS', 'L2', 'B', 'B1', 202501, 1000, 2.52],
['BAGS', 'L2', 'B', 'B2', 202501, 1000, 2.52],
['BAGS', 'L2', 'B', 'B3', 202501, 1000, 2.52],
['BAGS', 'L2', 'B', 'B4', 202501, 1000, 2.52],
['BAGS', 'L2', 'B', 'B5', 202502, 1000, 2.52],
['BAGS', 'L2', 'B', 'B6', 202502, 1000, 2.52],
['BAGS', 'L2', 'B', 'B7', 202503, 1000, 2.52],
['BAGS', 'L2', 'B', 'B8', 202503, 1000, 2.52],
['BAGS', 'L2', 'B', 'B9', 202503, 1000, 2.52],
]
columns = ['LEVEL1_1', 'Launch Season', 'SUBCLASS', 'ART', 'YW', 'ORDER', 'ROS1W']
df = pd.DataFrame(data, columns=columns)
# 按 Launch Season, SUBCLASS 和 YW 分组,并排序 ART
groups = {}
for (launch_season, subclass, yw), group in df.groupby(['Launch Season', 'SUBCLASS', 'YW']):
group = group.sort_values(by='ART') # 按 ART 排序
key = (launch_season, subclass)
if key not in groups:
groups[key] = {}
groups[key][yw] = group[['ART', 'ORDER', 'ROS1W']].values.tolist()
# 确定每个 (Launch Season, SUBCLASS) 的最大行数
max_rows = {key: max(len(arts) for arts in yw_dict.values()) for key, yw_dict in groups.items()}
# 年份周顺序
YW_order = sorted(df['YW'].unique())
# 生成目标 DataFrame 的数据
table_data = []
for (launch_season, subclass), yw_dict in groups.items():
print((launch_season, subclass), yw_dict)
for row_idx in range(max_rows[(launch_season, subclass)]):
row = [launch_season, subclass]
for yw in YW_order:
print(yw)
arts_data = yw_dict.get(yw, [])
if row_idx < len(arts_data):
art, order, ros1w = arts_data[row_idx]
desc = f'order:{order}\nros1w:{ros1w}' # 使用换行符连接
row.extend([art, desc])
else:
row.extend(['-', '-'])
table_data.append(row)
# 生成目标 DataFrame 的列名
header = ['Launch Season', 'SUBCLASS']
for yw in YW_order:
header.extend([str(yw), '']) # 创建重复列头
# 创建目标 DataFrame
result_df = pd.DataFrame(table_data, columns=header)
# 打印结果
print(result_df)