import pandas as pd

# 读取Excel文件
df = pd.read_excel('./data_src/pingcap_pipeline.xlsx')

# # 计算"当前详细状态及Close节奏"列的字数
# df['字数'] = df['当前详细状态及Close节奏'].apply(lambda x: len(str(x)))

# # 按字数排序并取TOP20
# top20_df = df.sort_values(by='字数', ascending=False).head(200)

# # 删除添加的字数列
# top20_df = top20_df.drop(columns=['字数'])

# # 输出到新的Excel文件
# top20_df.to_excel('output_top200.xlsx', index=False)

print(len(df["负责人（必填）"].unique()))
# 统计每个负责人的数量
responsible_person_counts = df["负责人（必填）"].value_counts()

# 将结果转换为DataFrame
result_df = pd.DataFrame({'负责人': responsible_person_counts.index, '数量': responsible_person_counts.values})

# 按数量降序排序
result_df = result_df.sort_values('数量', ascending=False)

# 打印结果
print(result_df)

# 可选：将结果保存到Excel文件
result_df.to_excel('responsible_person_counts.xlsx', index=False)

# 获取负责人数量最多的前10名
top_10_responsible = result_df.head(10)['负责人'].tolist()

# 根据top 10负责人过滤原始数据框
filtered_df = df[df["负责人（必填）"].isin(top_10_responsible)]

# 为每个负责人随机选择一半的数据
half_filtered_df = filtered_df.groupby("负责人（必填）").apply(lambda x: x.sample(frac=0.25, random_state=42)).reset_index(drop=True)

# 打印过滤和减半后的数据框信息
print(f"原始过滤后的数据框行数: {len(filtered_df)}")
print(f"减半后的数据框行数: {len(half_filtered_df)}")
print(f"Top 10 负责人: {top_10_responsible}")

# 可选：将减半后的结果保存到新的Excel文件
half_filtered_df.to_excel('./data_intermediate/pingcap_pipeline_top_sales.xlsx', index=False)