如何用pandas中的groupby计算绝对和?
例如,给定DataFrame:
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 .
2 回答
您可以应用一个取绝对值的函数,然后对其求和:
您还可以使用绝对值创建一个新列,然后求和:
您可以将
DataFrameGroupBy.apply
与lambda一起使用:要返回
Player
列,请使用df.reset_index
: