我有一個(gè) DataFrame,我需要?jiǎng)?chuàng)建一個(gè)新列,其中包含原始 DataFrame 中每一行的第二大值。樣本: df = pd.DataFrame(np.random.randint(1,100, 80).reshape(8, -1))期望的輸出: 0 1 2 3 4 5 6 7 8 9 penultimate0 52 69 62 7 20 69 38 10 57 17 621 52 94 49 63 1 90 14 76 20 84 902 78 37 58 7 27 41 27 26 48 51 583 6 39 99 36 62 90 47 25 60 84 904 37 36 91 93 76 69 86 95 69 6 935 5 54 73 61 22 29 99 27 46 24 736 71 65 45 9 63 46 4 93 36 18 717 85 7 76 46 65 97 64 52 28 80 85如何用盡可能少的代碼完成這項(xiàng)工作?
2 回答

不負(fù)相思意
TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超10個(gè)贊
你可以使用NumPy這個(gè):
import numpy as np
df = pd.DataFrame(np.random.randint(1,100, 80).reshape(8, -1))
df['penultimate'] = np.sort(df.values, 1)[:, -2]
print(df)
使用NumPy更快。

慕的地10843
TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超8個(gè)贊
這是一個(gè)簡(jiǎn)單的 lambda 函數(shù)!
# Input
df = pd.DataFrame(np.random.randint(1,100, 80).reshape(8, -1))
# Output
out = df.apply(lambda x: x.sort_values().unique()[-2], axis=1)
df['penultimate'] = out
print(df)
干杯!
添加回答
舉報(bào)
0/150
提交
取消