🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@@ -24,7 +24,6 @@ WHERE dt >= ${start}
AND dt <= ${end}
AND usersharedepth = 0
AND videoid IS NOT NULL
-AND 再分享merge一级品类 IS NOT NULL
GROUP BY dt, channel, merge一级品类, merge二级品类, 再分享merge一级品类, 再分享merge二级品类
ORDER BY dt, channel, 点击uv DESC
;
@@ -42,6 +42,12 @@ def get_cat2_label(cat1, cat2):
return f"{cat1_str}/{cat2}"
return cat1_str
+# 获取品类标签(处理空值)
+def get_cat_label(val):
+ if pd.notna(val) and str(val).strip():
+ return str(val)
+ return '未知'
+
# 计算渠道×日期×品类级别的矩阵数据
def calc_matrix_data(channel, date=None, level='cat1'):
"""计算指定渠道和日期的品类矩阵"""
@@ -55,8 +61,8 @@ def calc_matrix_data(channel, date=None, level='cat1'):
# 根据级别选择品类列
if level == 'cat1':
# 填充空值
- ch_df['头部一级品类'] = ch_df['头部一级品类'].fillna('未知')
- ch_df['再分享一级品类'] = ch_df['再分享一级品类'].fillna('未知')
+ ch_df['头部一级品类'] = ch_df['头部一级品类'].apply(get_cat_label)
+ ch_df['再分享一级品类'] = ch_df['再分享一级品类'].apply(get_cat_label)
row_col = '头部一级品类'
col_col = '再分享一级品类'
else: