Отличный первый вопрос, я предполагаю, что вы делаете курс python for datascience на coursera?
Как уже указывалось, df['Gold'].max()
правильно, однако, если тип данных неверен, он не вернетожидаемый результат.Итак, во-первых, убедитесь, что это число.Вы можете проверить это, запустив df['Gold'].dtype
, если для этого набора данных выходной сигнал не int64
, вы, вероятно, сможете исправить его, запустив df.loc[:,'Gold'] = df.loc[:,'Gold'].str.replace(',','').astype(int)
, после чего df['Gold'].max()
вернет 1022.
Когда дело доходит доВ этом случае вы можете выполнять итерацию по всем значениям в серии Gold вместо того, чтобы выполнять итерации по всем столбцам и всем строкам.Обратите внимание, что python использует 0 индексирования!поэтому, если бы вы использовали строку 1 в качестве начальной точки, вы бы получили неверный результат, если наибольшее значение находится в первой строке (row0), и вы индексируете, используя [Index]
, а не .Index
.Таким образом, цикл for может выглядеть следующим образом.
CurrentMax = df['Gold'][0]
for value in df['Gold']:
if value>CurrentMax:
CurrentMax = value
print(CurrentMax)
Обернут как функция:
def rowbyrow(df=df):
CurrentMax = df['Gold'][0]
for value in df['Gold']:
if value>CurrentMax:
CurrentMax = value
#print(CurrentMax) if you want to print the result when running
return CurrentMax
Относительно пункта 3. Я полагаю, что вы ищете ниже, он фильтрует золото погде значение Gold равно максимальному значению, так как вы использовали две скобки вокруг Gold
, это вернет информационный кадр, а не только значение: df[['Gold']][df.Gold == df.Gold.max()]
с одной скобкой вернет серию: df['Gold'][df.Gold == df.Gold.max()]
Что касается пункта 5, синтаксическая ошибка может быть вызвана, если вы используете Python 3?В Python 3 вам нужно использовать ()
после оператора print
, поэтому ниже должно работать:
s=df.max()
print('%s' % (s['Gold']))
Относительно пункта 6: a если вы хотите вывести только определенный столбец, вам нужно пропустить этот столбец(s) после условия фильтрации (разделенного ,
), как показано ниже:
df.loc[df['Gold'].idxmax(),'Gold']
если вы хотите вернуть несколько столбцов, вы можете передать список, например
df.loc[df['Gold'].idxmax(),['Country','Gold']]
для точки 1: c, [:2]
вернет первые две буквы.Поэтому всегда будет ложным при сравнении с четырехбуквенным словом Gold
.
Некоторые сравнения производительности:
1.
%%timeit
df.loc[df['Gold'].idxmax(),'Gold']
10000 loops, best of 3: 76.6 µs per loop
2.
%%timeit
s=df.max()
'%s' % (s['Gold'])
1000 loops, best of 3: 733 µs per loop
3.
%%timeit
rowbyrow()
10000 loops, best of 3: 71 µs per loop
4.
%%timeit
df['Gold'].max()
10000 loops, best of 3: 106 µs per loop
Я был удивлен, увидев, что функция rowbyrow()
показала самый быстрый результат,
После создания ряда со случайными значениями 10k, rowbyrow()
был самым быстрым.
Смотрите здесь:
df = pd.DataFrame((np.random.rand(10000, 1)), columns=['Gold'])
%%timeit # no. 1
df['Gold'].max()
The slowest run took 10.30 times longer than the fastest.
10000 loops, best of 3: 127 µs per loop
%%timeit # no. 2
rowbyrow()
The slowest run took 8.12 times longer than the fastest.
10000 loops, best of 3: 72.7 µs per loop