熊猫:将值在一组内下移一行

发布于 2021-01-29 19:34:37

我有一个Pandas数据框,我想创建一个新列,其值是另一列的值,向下移动一行。最后一行应显示NaN。

问题是我想按组进行此操作,每个组的最后一行显示NaN。不能让组的最后一行从数据组中恰好相邻的组中“窃取”一个值。

我尝试的实现方式非常可耻,所以我显然误解了一些基本知识。

df['B_shifted'] = df.groupby(['A'])['B'].transform(lambda x:x.values[1:])
关注者
0
被浏览
90
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    Shift对groupby子句的输出起作用:

    >>> df = pandas.DataFrame(numpy.random.randint(1,3, (10,5)), columns=['a','b','c','d','e'])
    >>> df
       a  b  c  d  e
    0  2  1  2  1  1
    1  2  1  1  1  1
    2  1  2  2  1  2
    3  1  2  1  1  2
    4  2  2  1  1  2
    5  2  2  2  2  1
    6  2  2  1  1  1
    7  2  2  2  1  1
    8  2  2  2  2  1
    9  2  2  2  2  1
    
    
    for k, v in df.groupby('a'):
        print k
        print 'normal'
        print v
        print 'shifted'
        print v.shift(1)
    
    1
    normal
       a  b  c  d  e
    2  1  2  2  1  2
    3  1  2  1  1  2
    shifted
        a   b   c   d   e
    2 NaN NaN NaN NaN NaN
    3   1   2   2   1   2
    2
    normal
       a  b  c  d  e
    0  2  1  2  1  1
    1  2  1  1  1  1
    4  2  2  1  1  2
    5  2  2  2  2  1
    6  2  2  1  1  1
    7  2  2  2  1  1
    8  2  2  2  2  1
    9  2  2  2  2  1
    shifted
        a   b   c   d   e
    0 NaN NaN NaN NaN NaN
    1   2   1   2   1   1
    4   2   1   1   1   1
    5   2   2   1   1   2
    6   2   2   2   2   1
    7   2   2   1   1   1
    8   2   2   2   1   1
    9   2   2   2   2   1
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看