gpt4 book ai didi

python - 如何从 Pandas Dataframe 中的不完整数据生成连续记录

转载 作者:行者123 更新时间:2023-12-01 05:25:11 24 4
gpt4 key购买 nike

好的,我有一个关于游戏结果的数据集不完整,我想为该游戏中没有数据的玩家生成一个包含存在数据或零值的图。此外,我想通过列表添加当前的数据:一些玩家是攻击者,一些玩家是防御者我的数据是这样的:

原始数据:

Game    Player  Goal    Assits  Fouls
1 Alpha 1 1 0
1 Beta 2 0 1
2 Alpha 0 1 1
2 Gamma 2 0 0
3 Beta 3 0 1
4 Alpha 1 1 1
4 Beta 2 0 1
5 Alpha 0 1 1
5 Beta 1 0 0
5 Gamma 0 1 1

期望的结果:进球得分 + 助攻得分,攻击者 = ['Alpha','Beta'] 和防守者 =['Gamma']

Game    Attackers   Defenders
1 4 0
2 1 2
3 3 0
4 4 0
5 2 1

我将所有原始数据保存在 pandas 数据框中,并且尝试使用 isin 函数来获取数据。这给我留下了不同长度的结果,即如果它“不在”则没有添加数据。我会(如图所示,就像零一样。==> 即在第 1 场比赛中没有提到 Gamma,因此他的得分为零。

感谢您的帮助

最佳答案

这有点困惑,但肯定可行。

首先,您需要对 df 进行 reset_index(),以使分组更容易。 Groupby 无法同时优雅地处理索引和列上的分组 ( GH issue )。

In [64]: df = df.reset_index()

定义从玩家到位置(攻击者或防御者)的映射:

In [65]: kind = {'Alpha': 'Attackers', 'Beta': 'Attackers', 'Gamma': 'Defenders'}

理想情况下,您可以在一行中完成接下来的 3 个步骤,但我在聚合方面遇到了麻烦。首先按位置和比赛进行分组。

In [66]: grouped = df.groupby(['Game', df.Player.map(kind)]).sum()

In [67]: grouped
Out[67]:
Goal Assits Fouls
Game Player
1 Attackers 3 1 1
2 Attackers 0 1 1
Defenders 2 0 0
3 Attackers 3 0 1
4 Attackers 3 1 2
5 Attackers 1 1 1
Defenders 0 1 1

[7 rows x 3 columns]

然后计算点,得到一个系列:

In [68]: points = grouped['Goal'] + grouped['Assits']

In [69]: points
Out[69]:
Game Player
1 Attackers 4
2 Attackers 1
Defenders 2
3 Attackers 3
4 Attackers 4
5 Attackers 2
Defenders 1
dtype: int64

最后unstack()。这会在没有任何值的地方(例如游戏 1、防守者)创建 NaN,我们将用 0 填充。

In [70]: points.unstack('Player').fillna(0)
Out[70]:
Player Attackers Defenders
Game
1 4 0
2 1 2
3 3 0
4 4 0
5 2 1

[5 rows x 2 columns]

关于python - 如何从 Pandas Dataframe 中的不完整数据生成连续记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21509466/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com