gpt4 book ai didi

python - Pandas 计数

转载 作者:行者123 更新时间:2023-11-28 21:41:04 25 4
gpt4 key购买 nike

我有一个 pandas 数据框,如下所示:

ID  round   player1     player2 
1 1 A B
1 2 A C
1 3 B D
2 1 B C
2 2 C D
2 3 C E
3 1 B C
3 2 C D
3 3 C A

dataframe 包含运动比赛结果,其中 ID 列表示一场比赛,round 列表示每场比赛的回合,player1player2 列包含在各自的 round 中对战的玩家的名字。

我现在想累计参加锦标赛的次数,比如说,玩家 A。在伪代码中,这意味着:如果名称为 A 的玩家出现在每个锦标赛 IDplayer1player2 列中>,将计数器加 1。

结果应如下所示(注意:在我的示例中,玩家 A 确实以 ID 1 和 3 参加了锦标赛):

ID  round   player1     player2     playerAparticipated
1 1 A B 1
1 2 A C 1
1 3 B D 1
2 1 B C 0
2 2 C D 0
2 3 C E 0
3 1 B C 2
3 2 C D 2
3 3 C A 2

我目前的状态是,我添加了一个包含值 10 的“助手”列,表示如果相应玩家参加了比赛:

ID  round   player1     player2     helper
1 1 A B 1
1 2 A C 1
1 3 B D 1
2 1 B C 0
2 2 C D 0
2 3 C E 0
3 1 B C 1
3 2 C D 1
3 3 C A 1

我认为我只需要最后一步,例如,巧妙地使用 cumsum() 以所需方式对 helper 列进行计数。但是,我还没有想出解决方案。

最佳答案

我认为你需要:


df1 = df.drop_duplicates('ID').set_index('ID')
s = df1.loc[df1['helper'] != 0, 'helper'].cumsum().reindex(index=df1.index, fill_value=0)
df['playerAparticipated'] = df['ID'].map(s)
print (df)
ID round player1 player2 helper playerAparticipated
0 1 1 A B 1 1
1 1 2 A C 1 1
2 1 3 B D 1 1
3 2 1 B C 0 0
4 2 2 C D 0 0
5 2 3 C E 0 0
6 3 1 B C 1 2
7 3 2 C D 1 2
8 3 3 C A 1 2

map 可以使用 join使用重命名:

df = df.join(s.rename('playerAparticipated'), on='ID')
print (df)
ID round player1 player2 helper playerAparticipated
0 1 1 A B 1 1
1 1 2 A C 1 1
2 1 3 B D 1 1
3 2 1 B C 0 0
4 2 2 C D 0 0
5 2 3 C E 0 0
6 3 1 B C 1 2
7 3 2 C D 1 2
8 3 3 C A 1 2

关于python - Pandas 计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45119623/

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