如何在Pandas中统计不同招标项目下投标者组合的投标次数
解决投标者组合共同投标次数统计问题
核心需求
获取每个投标者二人组合的共同投标项目次数,每个组合仅显示一次,避免重复记录。
解决步骤及代码
1. 导入依赖库
import pandas as pd from itertools import combinations
2. 加载原始数据
data={'Tender_id':['T1','T1','T1','T1','T1','T1','T1','T1','T1','T1','T2','T2','T2','T2','T2','T2','T2','T2','T2','T2','T3','T3','T3','T3','T3','T3','T3','T3','T3','T3','T4','T4','T4','T4','T4','T4','T4','T4','T4','T4','T5','T5','T5','T5','T5','T5','T5','T5','T5','T5'], 'Bidder_id':['B1','B2','B3','B4','B5','B6','B7','B8','B9','B10','B2','B3','B4','B5','B6','B7','B8','B9','B10','B11','B1','B2','B3','B14','B15','B16','B7','B92','B9','B1','B91','B2','B3','B4','B5','B6','B17','B18','B19','B10','B1','B2','B93','B14','B15','B16','B17','B18','B19','B10']} df = pd.DataFrame(data)
3. 数据预处理:去重
同一招标项目中,同一投标者多次投标应视为一次,先去重避免无效组合:
df_unique = df.drop_duplicates(subset=['Tender_id', 'Bidder_id'])
4. 生成唯一投标者组合
对每个项目的投标者排序后生成组合,确保B1-B2和B2-B1被视为同一组合,避免重复统计:
combinations_list = [] for tender, bidders in df_unique.groupby('Tender_id')['Bidder_id']: sorted_bidders = sorted(bidders) for pair in combinations(sorted_bidders, 2): combinations_list.append({ 'Bidder_1': pair[0], 'Bidder_2': pair[1], 'Tender_id': tender }) df_pairs = pd.DataFrame(combinations_list)
5. 统计组合共同投标次数
按投标者组合分组,直接统计出现次数(即共同投标的项目数):
result = df_pairs.groupby(['Bidder_1', 'Bidder_2']).size().reset_index(name='共同投标次数') # 查看结果 print(result)
结果说明
最终的result DataFrame中,每一行对应一个唯一的投标者组合,共同投标次数列显示该组合一起参与投标的招标项目总数,无重复记录。
内容的提问来源于stack exchange,提问作者chandersheel
相关产品推荐
相关产品推荐

