在Py Coursera课程中流行的UM DS简介中,我很难完成第2周作业中的第二个问题。基于以下df示例:
# Summer Silver Bronze Total ... Silver.2 Bronze.2 Combined total ID
Gold ...
0 13 0 2 2 ... 0 2 2 AFG
5 12 2 8 15 ... 2 8 15 ALG
18 23 24 28 70 ... 24 28 70 ARG
1 5 2 9 12 ... 2 9 12 ARM
3 2 4 5 12 ... 4 5 12 ANZ
[5 rows x 15 columns]
问题如下:
问题1
哪个国家/地区的夏季奥运会获得了最多的金牌?
此函数应返回单个字符串值。
答案是“美国”
我知道这很初级,但是我无法理解。非常尴尬,但非常沮丧。
以下是我遇到的错误。
df['Gold'].argmax()
...
KeyError: 'Gold'
df['Gold'].idxmax()
...
KeyError: 'Gold'
max(df.idxmax())
...
TypeError: reduction operation 'argmax' not allowed for this dtype
df.ID.idxmax()
TypeError: reduction operation 'argmax' not allowed for this dtype
这有效,但不适用于功能
df['ID'].sort_index(axis=0,ascending=False).iloc[0]
我非常感谢您的支持。
更新1 One successful attempt 感谢@Grr!我仍然对其他方法为何失败感到好奇
更新2 Second successful attempt感谢@alec_djinn,这种方法类似于我以前尝试过但无法弄清楚的方法。谢谢!
答案 0 :(得分:0)
像这样尝试:
df.ID.idxmax()
答案 1 :(得分:0)
该列是您的索引有点奇怪,但是因为这样您可能会抓住索引值等于索引最大值的行,然后引用ID
列。
df[df.index == df.index.max()].ID
您的其他方法由于KeyError
而失败。索引名称为Gold
,但是Gold
不在列索引中,因此会引发KeyError
。即如果以“ Gold”作为索引,则无法使用df['Gold']
。而是使用df.index
。您也可以像这样重置索引。
df = df.reset_index()
df
Gold # Summer Silver Bronze Total # Winter Gold.1 ... Total.1 # Games Gold.2 Silver.2 Bronze.2 Combined total ID
0 0 13 0 2 2 0 0 ... 0 13 0 0 2 2 AFG
1 5 12 2 8 15 3 0 ... 0 15 5 2 8 15 ALG
2 18 23 24 28 70 18 0 ... 0 41 18 24 28 70 ARG
3 1 5 2 9 12 6 0 ... 0 11 1 2 9 12 ARM
4 3 2 4 5 12 0 0 ... 0 2 3 4 5 12 ANZ
[5 rows x 16 columns]
然后,您可以像以前一样使用df['Gold']
或df.Gold
,因为现在可以接受“金”键。
df.Gold.idxmax()
2
在我的情况下,它是18枚金牌的“ ARG”
答案 2 :(得分:0)
我认为您想执行以下操作:
df.sort_index(ascending=False, inplace=True)
df.head(1)['ID'] #or df.iloc[0]['ID']
在函数中应该是:
def f(df):
df.sort_index(ascending=False, inplace=True) #you can sort outside the function as well
return df.iloc[0]['ID']