首页 > 解决方案 > Pandas 基于另一列的条件移位

问题描述

我有一个简单的人员和价值数据框。我想添加一个返回用户下一个值的列。使用 a 很容易做到这一点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

标签: pythonpython-3.xpandas

解决方案


看起来你想要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

推荐阅读