SuperAPI AI Directory

group-by-analysis

Data & analytics

View repository

Updated 10-16 03:11

About this skill

Step1 Clean and preprocess the data, including handling merged cells, regex filtering, and category mapping.

import re

# 1. 处理合并单元格:向前填充
target_col = 'category_column'
df[target_col] = df[target_col].ffill()

# 2. 正则清洗:去除无效字符或筛选特定格式
def clean_text(text):
    if pd.isna(text): return text
    return re.sub(r'[^\w\s]', '', str(text)).strip()

df[target_col] = df[target_col].apply(clean_text)
3. Category mapping function skeleton

def map_categories(value): mapping = { 'example_key_1': 'Group_A', 'example_key_2': 'Group_B' } return mapping.get(value, 'Others')

df['group_tag'] = df[target_col].apply(map_categories)


Step2 执行分组统计,计算频数、占比,并添加总计行。
```python
group_col = 'group_tag'
value_col = 'value_column'

# 分组聚合:计数与求和
summary = df.groupby(group_col)[value_col].agg(['count', 'sum']).reset_index()

# 计算占比
total_sum = summary['sum'].sum()
summary['percentage'] = (summary['sum'] / total_sum).map(lambda x: f"{x:.2%}")

# 添加总计行
total_row = pd.DataFrame({
    group_col: ['Total'],
    'count': [summary['count'].sum()],
    'sum': [total_sum],
    'percentage': ['100.00%']
})
summary_final = pd.concat([summary, total_row], ignore_index=True)

print(summary_final)

Step3 Generate a visualization bar chart, configuring Chinese fonts, value labels, and grid beautification.

import matplotlib.pyplot as plt

# 配置中文字体支持
plt.rcParams['font.sans-serif'] = ['SimHei', 'DejaVu Sans']
plt.rcParams['axes.unicode_minus'] = False

plt.figure(figsize=(10, 6), dpi=100)
bars = plt.bar(summary[group_col], summary['sum'], color='#4472C4')

# 添加数值标签
for bar in bars:
    height = bar.get_height()
    plt.text(bar.get_x() + bar.get_width()/2., height,
             f'{height:,.0f}', ha='center', va='bottom', fontsize=10)

plt.title("Distribution Analysis", fontsize=14)
plt.xlabel(group_col)
plt.ylabel("Values")
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.tight_layout()

chart_path = "analysis_chart.png"
plt.savefig(chart_path)

Step4 Use openpyxl to generate an Excel report with styles and conditional formatting, and provide it for download.

from openpyxl import Workbook
from openpyxl.styles import PatternFill, Font, Alignment, Border, Side

output_path = "analysis_report.xlsx"
wb = Workbook()
ws = wb.active
ws.title = "Summary Report"

# 定义样式
header_style = {
    "fill": PatternFill(start_color="4472C4", end_color="4472C4", fill_type="solid"),
    "font": Font(bold=True, color="FFFFFF"),
    "alignment": Alignment(horizontal="center"),
    "border": Border(left=Side(style="thin"), right=Side(style="thin"), top=Side(style="thin"), bottom=Side(style="thin"))
}

highlight_style = PatternFill(start_color="00B050", end_color="00B050", fill_type="solid")

# 写入数据并应用样式
for r_idx, row in enumerate(summary_final.values, 2):
    for c_idx, value in enumerate(row, 1):
        cell = ws.cell(row=r_idx, column=c_idx, value=value)
        # 示例:对最大值所在行进行绿色标记
        if value == summary['sum'].max():
            cell.fill = highlight_style

# 自动调整列宽
for col in ws.columns:
    max_length = max(len(str(cell.value)) for cell in col)
    ws.column_dimensions[col[0].column_letter].width = max_length + 2

wb.save(output_path)
print(f"Download link: {output_path}")