【发布时间】:2021-08-10 23:26:44
【问题描述】:
我有一个 CSV 格式的大型数据集(大约 200,000 行 x 30 列)。我需要使用 pandas 来预处理这些数据。我在下面包含了一个虚拟数据集,以帮助可视化问题。
data = {'Batsman':['Tom', 'Nick', 'Nick', 'Nick', 'Tom', 'Nick', 'Nick', 'Pete', 'Pete'],
'Outcome':[1, 0, 1, 'Wide', 'Out', 4, 1, 2, 0],
'Bowler':['Bill', 'Bill', 'Bill', 'Bill', 'Bill', 'Bill', 'Bill', 'Ben', 'Ben']
}
df = pd.DataFrame(data)
df
目标是有单独的列来显示击球手和投球手的每个结果的概率。以虚拟数据集中的示例为例,Tom 有 50% 的机会出现“1”或“Out”的结果
这是通过以下方式计算的:
- 击球手列 - 击球手“X”的总行数;
- 结果列 - 带有“X”的结果总数;
- 第 2 点。/第 1 点。确定每个结果的概率;
- 重复上述步骤以确定保龄球概率
来自虚拟数据的最终数据帧应类似于:
data = {'Batsman':['Tom', 'Nick', 'Nick', 'Nick', 'Tom', 'Nick', 'Nick', 'Pete', 'Pete'],
'zero_prob_bat':[0,0.4,0.4,0.4,0,0.4,0.4,0.5,0.5],
'one_prob_bat':[0.5,0.4,0.4,0.4,0.5,0.4,0.4,0,0],
'two_prob_bat':[0,0,0,0,0,0,0,0.5,0.5],
'three_prob_bat':[0,0,0,0,0,0,0,0,0],
'four_prob_bat':[0,0.2,0.2,0.2,0,0.2,0.2,0,0],
'six_prob_bat':[0,0,0,0,0,0,0,0,0],
'out_prob_bat':[0.5,0,0,0,0.5,0,0,0,0],
'Bowler':['Bill', 'Bill', 'Bill', 'Bill', 'Bill', 'Bill', 'Bill', 'Ben', 'Ben'],
'zero_prob_bowl':[0.1428,0.1428,0.1428,0.1428,0.1428,0.1428,0.1428,0.5,0.5],
'one_prob_bowl':[0.4285,0.4285,0.4285,0.4285,0.4285,0.4285,0.4285,0,0],
'two_prob_bowl':[0,0,0,0,0,0,0,0.5,0.5],
'three_prob_bowl':[0,0,0,0,0,0,0,0,0],
'four_prob_bowl':[0.1428,0.1428,0.1428,0.1428,0.1428,0.1428,0.1428,0,0],
'six_prob_bowl':[0.1428,0.1428,0.1428,0.1428,0.1428,0.1428,0.1428,0,0],
'out_prob_bowl':[0.1428,0.1428,0.1428,0.1428,0.1428,0.1428,0.1428,0,0],
'Outcome':[1, 0, 1, 'Wide', 'Out', 4, 1, 2, 0]
}
一个问题是,我的原始数据集有 600 多个唯一名称。我可以手动 .groupby 击球手/投球手列中的每个唯一名称,但这不是一个可扩展的解决方案,因为会不断添加新名称。
我很想:-
- .计算击球手/投球手每个唯一名称的实例数;
- .计算每个独特的击球手/投球手的不同结果的数量;
- 执行查找以匹配每个击球手/投球手旁边的概率;
但是,由于我的数据集大小将不断增长,我对实现答案here 中详述的查找功能持谨慎态度。在过去,当我使用 excel/CSV 时,这也产生了许多问题,所以我不想落入任何类似的陷阱。
如果有人能解释他们将如何解决这个问题,以便我有目标,那将不胜感激。
【问题讨论】: