groupby max min的正确语法是什么?



我遵循这个答案,但是,我无法获得正确的语法为我的目的

df.head()
country             league   Win   DNB  O 1.5  U 4.5
113         Iceland  Urvalsdeild Women  3.19  3.43   4.89   2.10
135         Belgium     Jupiler League  1.99  1.99   3.59   2.40
165          Brazil            Serie D  1.71  1.98   3.80   1.90
238  Czech Republic         U19 League  2.90  2.90   4.70   2.25
244           China         Jia League  2.42  0.94   4.80   2.00

我想要country,league,max of ('Win', 'DNB', 'O 1.5'),min of ('U 4.5')

I am trying

df= df.groupby('country', 'league).agg({'Win':'max', 'DNB':'max', 'O 1.5':'max', 'U 4.5': 'min'})[['Win', 'DNB', 'O 1.5', 'U 4.5']].reset_index()

然而,我得到SyntaxError: invalid syntax

正确的语法是什么?

语法错误是因为在'league之后缺少引号(')。但是,如果您修复了这个问题,您将得到另一个错误:

ValueError: No axis named league for object type DataFrame

这个错误是因为传递df.groupby('country', 'league')相当于传递df.groupby(by='country', axis='league')(第一种情况是传递位置参数,第二种情况是传递关键字参数)。

您的问题表明您希望使用国家和联赛作为grouper,因此使用方括号([])来表示。

供参考,groupby也有as_index参数,默认为True。如果您稍后要使用reset_index,则从一开始就将as_index传递为False,因此您不需要使用reset_index

另外,groupby.agg(...)输出的数据帧的列只是传递给agg的列,所以不需要像[[...]]那样再次索引它们。

最终代码:

df.groupby(['country', 'league'], as_index=False).agg({'Win':'max', 'DNB':'max', 'O 1.5':'max', 'U 4.5': 'min'})

相关内容

  • 没有找到相关文章

最新更新