Python 绘制一起玩的时间百分比

Python 绘制一起玩的时间百分比,python,r,python-3.x,Python,R,Python 3.x,我希望有人能给我一个想法或解决我下面的问题。我一直在试图找出如何根据开始时间、结束时间、和期间(或我没有提到的任何其他统计数据)计算出一个玩家与另一个玩家玩游戏的百分比。我可以对数据透视表中每个玩家的持续时间求和,以查看玩家的完整冰上时间,但在我的一生中,我似乎无法计算出另一个。无论它是用R、Excel还是python脚本编写,我已经用尽了所有的想法。我知道这不是一个直截了当的脚本问题,但我想不出更好的地方来提出这个问题。在示例1中,我可以清楚地看到Suter和Dumba在我提供的小数据片段中一

我希望有人能给我一个想法或解决我下面的问题。我一直在试图找出如何根据
开始时间
结束时间
、和
期间
(或我没有提到的任何其他统计数据)计算出一个玩家与另一个玩家玩游戏的百分比。我可以对数据透视表中每个玩家的
持续时间
求和,以查看玩家的完整冰上时间,但在我的一生中,我似乎无法计算出另一个。无论它是用R、Excel还是python脚本编写,我已经用尽了所有的想法。我知道这不是一个直截了当的脚本问题,但我想不出更好的地方来提出这个问题。在示例1中,我可以清楚地看到Suter和Dumba在我提供的小数据片段中一起玩了两次。但是把它画在一张图表上或者仅仅是找到百分比,这就是我想要的想法。下面是我如何访问OnIce数据的两个示例

例1。在周期/游戏结束时,我可以获得先前的换班数据。玩家的姓氏将在整个df中出现多次

    LastName  StartTime  EndTime  Duration ShiftNumber Period
    Foligno      0:00       0:40    0:40           1    1
    Suter        0:00       0:40    0:40           1    1
    Staal        0:00       0:40    0:40           1    1
    Niederreiter 0:00       0:40    0:40           1    1
    Dubnyk       0:00       20:00   20:00          1    1
    Dumba        0:00       0:40    0:40           1    1
    Zucker       0:40       1:26    0:46           1    1
    Koivu        0:40       1:34    0:54           1    1
    Murphy       0:40       1:26    0:46           1    1
    Brodin       0:40       1:26    0:46           1    1
    Granlund     0:40       1:39    0:59           1    1
    Reilly       1:26       2:09    0:43           1    1
    Winnik       1:26       2:18    0:52           1    1
    Coyle        1:34       2:16    0:42           1    1
    Stewart      1:39       2:13    0:34           1    1
    Dumba        2:09       2:39    0:30           2    1
    Suter        2:09       2:39    0:30           2    1
例2。我可以每隔几秒钟运行一个脚本,同时将玩家id保存到csv

HomePlayerId HomeDuration
8475744        94
8471702        74
8477944        69
8475163        74
8474651        623
8477043        74
HomePlayerId HomeDuration
8475744        111
8471702        91
8477944        86
8475163        91
8474651        640
8477043        91

下面的纯Python代码计算每对玩家的重叠时间总量。其核心思想是,给定player1的(开始t1,结束1)间隔和player2的(开始t2,结束2)间隔,则这两个间隔的重叠是

overlap = min(end1, end2) - max(start1, start2)

如果
重叠
你能让你的例子重现吗?哇,这是一个很棒的开始,谢谢你花时间写这篇文章。问题是,如果我想一次计算2名以上的球员,比如说6名,因为通常有5名滑冰运动员和1名守门员同时出现,我会在组合中增加更多吗?正如在p1、p2、p3、p4、p5、p6中一样?@MichaelTJohnson理论上说,我们可以修改我的代码来处理这个问题,但它会变得相当慢,因为有很多6路组合要通过。但是我想如果程序能够识别守门员,那么我们可以提高效率,这样它只创建包含一个守门员的组合。但是,基本原则仍然有效:对于给定的一组球员,我们从他们的结束时间的最小值中减去他们的开始时间的最大值。如果我更新数据,得到他们的位置,我们可以写进去吗?我给它添加了一个位置。@MichaelTJohnson最好写一个新的问题,并把它和这个问题联系起来。在得到一个或多个相关答案后再更改问题是不好的。对不起,我会这样做的!谢谢你,先生
('Foligno', [(0, 40)])
('Suter', [(0, 40), (129, 159)])
('Staal', [(0, 40)])
('Niederreiter', [(0, 40)])
('Dubnyk', [(0, 1200)])
('Dumba', [(0, 40), (129, 159)])
('Zucker', [(40, 86)])
('Koivu', [(40, 94)])
('Murphy', [(40, 86)])
('Brodin', [(40, 86)])
('Granlund', [(40, 99)])
('Reilly', [(86, 129)])
('Winnik', [(86, 138)])
('Coyle', [(94, 136)])
('Stewart', [(99, 133)])

Brodin Dubnyk 46
Brodin Granlund 46
Brodin Koivu 46
Brodin Murphy 46
Brodin Zucker 46
Coyle Dubnyk 42
Coyle Dumba 7
Coyle Granlund 5
Coyle Reilly 35
Coyle Stewart 34
Coyle Suter 7
Coyle Winnik 42
Dubnyk Dumba 70
Dubnyk Foligno 40
Dubnyk Granlund 59
Dubnyk Koivu 54
Dubnyk Murphy 46
Dubnyk Niederreiter 40
Dubnyk Reilly 43
Dubnyk Staal 40
Dubnyk Stewart 34
Dubnyk Suter 70
Dubnyk Winnik 52
Dubnyk Zucker 46
Dumba Foligno 40
Dumba Niederreiter 40
Dumba Staal 40
Dumba Stewart 4
Dumba Suter 70
Dumba Winnik 9
Foligno Niederreiter 40
Foligno Staal 40
Foligno Suter 40
Granlund Koivu 54
Granlund Murphy 46
Granlund Reilly 13
Granlund Winnik 13
Granlund Zucker 46
Koivu Murphy 46
Koivu Reilly 8
Koivu Winnik 8
Koivu Zucker 46
Murphy Zucker 46
Niederreiter Staal 40
Niederreiter Suter 40
Reilly Stewart 30
Reilly Winnik 43
Staal Suter 40
Stewart Suter 4
Stewart Winnik 34
Suter Winnik 9