gpt4 book ai didi

python - 如何使用 pandas 中的 groupby 计算绝对总和?

转载 作者:太空狗 更新时间:2023-10-30 02:16:13 25 4
gpt4 key购买 nike

如何在 pandas 中使用 groupby 计算绝对和?

例如,给定数据帧:

    Player  Score
0 A 100
1 B -150
2 A -110
3 B 180
4 B 125

我想要玩家 A 的总分 (100+110=210) 以及玩家 A 的总分 (150+180+125=455),忽略分数的符号。

我可以使用下面的代码来计算总和:

import pandas as pd
import numpy as np

frame = pd.DataFrame({'Player' : ['A', 'B', 'A', 'B', 'B'],
'Score' : [100, -150, -110, 180, 125]})

print('frame: {0}'.format(frame))

total_scores = frame[['Player','Score']].groupby(['Player']).agg(['sum'])

print('total_scores: {0}'.format(total_scores))

但是如何使用 groupby 计算绝对总和?

frame[['Player','Score']].abs().groupby(['Player']).agg(['sum']) 毫不奇怪地返回:

Traceback (most recent call last):
File "O:\tests\absolute_count.py", line 10, in <module>
total_scores = frame[['Player','Score']].abs().groupby(['Player']).agg(['sum'])
File "C:\Users\dernoncourt\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\core\generic.py", line 5518, in abs
return np.abs(self)
TypeError: bad operand type for abs(): 'str'

我不想改变 DataFrame。

最佳答案

您可以应用一个取绝对值然后求和的函数:

>>> frame.groupby('Player').Score.apply(lambda c: c.abs().sum())
Player
A 210
B 455
Name: Score, dtype: int64

您还可以创建一个包含绝对值的新列,然后对其求和:

>>> frame.assign(AbsScore=frame.Score.abs()).groupby('Player').AbsScore.sum()
Player
A 210
B 455
Name: AbsScore, dtype: int64

关于python - 如何使用 pandas 中的 groupby 计算绝对总和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45405192/

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