我遵循这个答案,但是,我无法获得正确的语法为我的目的
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'})