import pandas as pd
import os


def main():
    # 读取所有符合条件的Excel文件
    folder_path = "./"  # 文件存放目录
    sa_data = load_data(folder_path)

    while True:
        # 用户输入账号
        account = input("请输入要查询的用户账号（输入'exit'退出）：")
        if account.lower() == 'exit':
            break

        # 功能1：提取指定账号的完整数据并保存为Excel
        extract_account_data(sa_data, account)

        # 功能2：按账号维度统计分析
        analyze_account(sa_data, account)

    print("程序已退出。")


def load_data(folder_path):
    """读取所有SA_vip用户监测日报的Excel文件并合并"""
    dfs = []
    for filename in os.listdir(folder_path):
        if filename.startswith("SA_vip用户监测日报") and filename.endswith(".xlsx"):
            file_path = os.path.join(folder_path, filename)
            df = pd.read_excel(file_path, header=0)  # 第一行作为列名
            dfs.append(df)
    sa_data = pd.concat(dfs, ignore_index=True)
    print(f"已读取 {len(dfs)} 个文件，总行数：{len(sa_data)}")
    return sa_data


def extract_account_data(sa_data, account):
    """提取指定账号的全部数据并保存为Excel"""
    if account not in sa_data['用户账号'].values:
        print(f"⚠️ 警告：账号 {account} 不存在！")
        return

    account_df = sa_data[sa_data['用户账号'] == account]
    output_path = f"{account}_数据详情.xlsx"
    account_df.to_excel(output_path,sheet_name="sa", index=False)
    print(f"✅ 已保存 {account} 的完整数据至：{output_path}")


def analyze_account(sa_data, account):
    """按账号维度统计分析质差情况"""
    if account not in sa_data['用户账号'].values:
        print(f"⚠️ 警告：账号 {account} 不存在！")
        return

    # 过滤账号数据
    account_df = sa_data[sa_data['用户账号'] == account]

    # 统计基础指标
    total_records = len(account_df)
    total_apps = account_df['应用名称'].nunique()
    total_quality_issues = account_df[account_df['是否应用质差'] == 1].shape[0]

    # 家庭侧、内容侧质差统计
    family_issues = account_df[account_df['是否家庭侧质差'] == 1].shape[0]
    content_issues = account_df[account_df['是否内容侧质差'] == 1].shape[0]

    # 计算百分比（避免除以零）
    family_percent = (family_issues / total_quality_issues * 100) if total_quality_issues > 0 else 0
    content_percent = (content_issues / total_quality_issues * 100) if total_quality_issues > 0 else 0

    # 其他可选统计（如管道侧、其他质差类型）
    pipe_issues = account_df[account_df['是否管道侧质差'] == 1].shape[0]

    # 输出结果
    print("\n--- 账号分析报告 ---")
    print(f"账号：{account}")
    print(f"总记录数：{total_records}")
    print(f"应用数量：{total_apps}")
    print(f"总质差次数：{total_quality_issues}")
    print(f"家庭侧质差次数：{family_issues}（占比：{family_percent:.1f}%）")
    print(f"内容侧质差次数：{content_issues}（占比：{content_percent:.1f}%）")
    print(f"管道侧质差次数：{pipe_issues}")

    # 可视化建议（示例）
    print("\n--- 质差类型分布 ---")
    print(account_df[['是否家庭侧质差', '是否内容侧质差', '是否管道侧质差']].sum())


def run():
    main()


if __name__ == "__main__":
    run()

第二个
import pandas as pd
import os


def main():
    # 读取所有符合条件的Excel文件
    folder_path = "./"  # 文件存放目录
    sa_data = load_data(folder_path)

    while True:
        # 用户输入账号
        account = input("请输入要查询的用户账号（输入'exit'退出）：")
        if account.lower() == 'exit':
            break

        # 功能1：提取指定账号的完整数据并保存为Excel
        extract_account_data(sa_data, account)

        # 功能2：按账号维度统计分析
        analyze_account(sa_data, account)

    print("程序已退出。")


def load_data(folder_path):
    """读取所有SA_vip用户监测日报的Excel文件并合并"""
    dfs = []
    for filename in os.listdir(folder_path):
        if filename.startswith("SA_vip用户监测日报") and filename.endswith(".xlsx"):
            file_path = os.path.join(folder_path, filename)
            df = pd.read_excel(file_path, sheet_name="vip_poor_tv",header=0)  # 第一行作为列名
            dfs.append(df)
    sa_data = pd.concat(dfs, ignore_index=True)
    print(f"已读取 {len(dfs)} 个文件，总行数：{len(sa_data)}")
    return sa_data


def extract_account_data(sa_data, account):
    """提取指定账号的全部数据并保存为Excel"""
    if account not in sa_data['用户账号'].values:
        print(f"⚠️ 警告：账号 {account} 不存在！")
        return

    account_df = sa_data[sa_data['用户账号'] == account]
    output_path = f"{account}_数据详情.xlsx"
    account_df.to_excel(output_path,sheet_name="",index=False)
    print(f"✅ 已保存 {account} 的完整数据至：{output_path}")


def analyze_account(sa_data, account):
    """按账号维度统计分析质差情况"""
    if account not in sa_data['用户账号'].values:
        print(f"⚠️ 警告：账号 {account} 不存在！")
        return

    # 过滤账号数据
    account_df = sa_data[sa_data['用户账号'] == account]

    # 统计基础指标
    total_records = len(account_df)
    total_apps = account_df['应用名称'].nunique()
    total_quality_issues = account_df[account_df['是否应用质差'] == 1].shape[0]

    # 家庭侧、内容侧质差统计
    family_issues = account_df[account_df['是否家庭侧质差'] == 1].shape[0]
    content_issues = account_df[account_df['是否内容侧质差'] == 1].shape[0]

    # 计算百分比（避免除以零）
    family_percent = (family_issues / total_quality_issues * 100) if total_quality_issues > 0 else 0
    content_percent = (content_issues / total_quality_issues * 100) if total_quality_issues > 0 else 0

    # 其他可选统计（如管道侧、其他质差类型）
    pipe_issues = account_df[account_df['是否管道侧质差'] == 1].shape[0]

    # 输出结果
    print("\n--- 账号分析报告 ---")
    print(f"账号：{account}")
    print(f"总记录数：{total_records}")
    print(f"应用数量：{total_apps}")
    print(f"总质差次数：{total_quality_issues}")
    print(f"家庭侧质差次数：{family_issues}（占比：{family_percent:.1f}%）")
    print(f"内容侧质差次数：{content_issues}（占比：{content_percent:.1f}%）")
    print(f"管道侧质差次数：{pipe_issues}")

    # 可视化建议（示例）
    print("\n--- 质差类型分布 ---")
    print(account_df[['是否家庭侧质差', '是否内容侧质差', '是否管道侧质差']].sum())


def run():
    main()


if __name__ == "__main__":
    run()

将他俩合成一个