我有一个简单的人与价值数据框。我想添加一个返回用户下一个值的列。使用shift(-1)
可以很容易地做到这一点,但是我希望如果此人更改,则新列为空值。我可以遍历行,但这似乎是一个缓慢的选择。
原始数据框:
import pandas as pd
df = pd.DataFrame(data=[['A', 1], ['A', 4],
['B', 1], ['B', 4]],
columns=['person', 'val'])
person val
0 A 1
1 A 4
2 B 1
3 B 4
所需的输出:
person val conditional shift
0 A 1 4.0
1 A 4 NaN
2 B 1 6.0
3 B 6 NaN
答案 0 :(得分:1)
看起来像你想要的GroupBy.shift
:
df['conditional shift'] = df.groupby('person').val.shift(-1)
print(df)
person val conditional shift
0 A 1 4.0
1 A 4 NaN
2 B 1 6.0
3 B 6 NaN