请参阅pandas中的下一个索引

时间:2017-11-03 02:14:43

标签: python pandas

如果我有一个像这样简单的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

1 个答案:

答案 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