将行移至先前的观察

时间:2020-04-04 20:49:05

标签: python pandas

能否请您解释一下为什么此功能不起作用?

import pandas as pd
d = {'col1': [1, 2, 3 , 4, 5]}
df = pd.DataFrame(data=d)
df.apply(lambda row: row.shift(-1)[['col1']], axis=1)enter code here

它应该返回

[2 3 4 5 NaN]

但是它返回所有带有NaN的内容。我不想使用先前的观察来创建新列并对其进行处理。我想学习lambda内部的所有操作。

非常感谢:)

1 个答案:

答案 0 :(得分:0)

使用axis=1进行调用时,pd.apply函数将每次在不同的行上调用您的函数。在这种情况下,您的lambda函数将被包含1个元素的系列调用(因为每行包含1个元素)。如果您用lambda row: print(row)

替换lambda,则可以看到它

由于没有其他值,因此调用具有1个元素的序列的shift总是会导致NaN。