我一直在研究这个特殊的问题并尝试了各种不同的方法,但似乎无法解决它。我有一个如下所示的数据框:
Sequence GameID PlayerA PlayerB Left_Right
0 1 101 334 326 Right
1 2 101 334 326 Right
2 3 101 334 326 Left
3 4 101 326 334 Left
4 5 101 326 334 Right
5 6 101 326 334 Left
6 7 101 326 334 Right
7 8 101 326 334 Right
8 9 101 326 334 Left
9 10 101 334 326 Left
我最终要创建的是两列,一列的滚动总数为“右”,另一列的滚动总和为“左”。它由GameID和PlayerA分组。在上面的数据框中,我只显示一个gameid的一部分,因为它是一个snippit。这类似于excel中的countif,其中if条件为'Right'。
我对pandas的理解是使用pd.rolling_sum()函数,但我不太确定如何在设置条件时分组并应用它。我也尝试使用cumcount()无效
df.groupby(['GameID','PlayerA']).Left_Right.cumcount()
最终,其中一个新列将如下所示。我不确定我在上面的函数中指定'Right'的位置。当我做了一个pd.rolling_sum时,我使用了一个班次,但我又找不到这个组合的地方。
pd.rolling_sum((df["Left_Right"] == "Right"), 10000000, min_periods=0).shift(1)
Sequence GameID PlayerA PlayerB Left_Right CountIf_Right
0 1 101 334 326 Right 0
1 2 101 334 326 Right 1
2 3 101 334 326 Left 2
3 4 101 326 334 Left 0
4 5 101 326 334 Right 0
5 6 101 326 334 Left 1
6 7 101 326 334 Right 1
7 8 101 326 334 Right 2
8 9 101 326 334 Left 3
9 10 101 334 326 Left 2
因此,要浏览该列,它按游戏ID和播放器A分组,并且是条件为“正确”的滚动总和/标识。因此,在第1行中,在其上方的行中发生了0个权限。在第2行中,游戏中的玩家在其上方发生了1次。
非常感谢任何帮助