我有一个Pandas数据框,我想创建一个新列,其值是另一列的值,向下移动一行。最后一行应显示NaN。
问题是我想按组进行此操作,每个组的最后一行显示NaN。不能让组的最后一行从数据组中恰好相邻的组中“窃取”一个值。
我尝试的实现方式非常可耻,所以我显然误解了一些基本知识。
df['B_shifted'] = df.groupby(['A'])['B'].transform(lambda x:x.values[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