小编典典

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

python

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

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

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

df['B_shifted'] = df.groupby(['A'])['B'].transform(lambda x:x.values[1:])

阅读 207

收藏
2020-12-20

共1个答案

小编典典

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
2020-12-20