Pandas DataFrame应用函数调试

Pandas DataFrame apply function debug

import numpy as np
import pandas as pd

df = pd.DataFrame({
    'a': [4, 5, 3, 1, 2],
    'b': [20, 10, 40, 50, 30],
    'c': [25, 20, 5, 15, 10]
})

def second_largest1(df1):
    return df1[df1.argmax()-1]

print second_largest1(df['a'])
print second_largest1(df['b'])
print second_largest1(df['c'])

我的 'second_largest1' 函数工作分别显示 df['a'] 和 df['b']、4 和 40 的结果。

然而,它不适用于 df['c']。为什么不起作用?

错误信息是:

KeyError: -1L

我觉得你需要nlargest with iloc:

def second_largest1(df1):
    return df1.nlargest(2).iloc[1]

print (second_largest1(df['a']))
4
print (second_largest1(df['b']))
40
print (second_largest1(df['c']))
20

sort_values with iloc:

def second_largest1(df1):
    return df1.sort_values(ascending=False).iloc[1]