如果我有一个像这样简单的pandas DataFrame:
frame = pd.DataFrame(np.arange(12).reshape((3,4)), columns=list('abcd'), index=list('123'))
我想找到每一行的最大值,并使用它来查找列中的下一个值并将此值添加到新列。
所以上面的DataFrame看起来像这样(d2改为3):
a b c d
1 1 2 3 4
2 5 6 7 3
3 9 10 11 12
因此,从概念上讲,第一行应该被扫描,4被识别为最大数字,然后找到3作为同一列中但在下一个索引中的数字。类似地,对于行2,7是最大数字,11是该列中的下一个数字。所以3和11应该添加到这样的新列中:
a b c d Next
1 1 2 3 4 NaN
2 5 6 7 3 3
3 9 10 11 12 11
我开始制作这样的函数,但它只找到最大值。
f = lambda x: x.max()
max = frame.apply(f, axis='columns')
frame['Next'] = max
答案 0 :(得分:1)
根据您的修改,您可以使用np.argsort
:
i = np.arange(len(df))
j = pd.Series(np.argmax(df.values, axis=1))
df['next'] = df.shift(-1).values[i, j]
a b c d next
1 1 2 3 4 3.0
2 5 6 7 3 11.0
3 9 10 11 12 NaN