Python 如何根据条件值对熊猫进行转换?

Python 如何根据条件值对熊猫进行转换?,python,pandas,Python,Pandas,我正在尝试做一些特性工程,我正在测试的一个想法是在数据帧中添加以前的对象作为列。我知道.shift()可以在熊猫身上实现这一点,但问题是我只在它符合特定条件时才观察它的移动 # add new column for previous value df_labeled = df_labeled.sort_values(by=['ticker', 'periodDate']) #this ensures data/date are in order df_labeled['lastValue'] =

我正在尝试做一些特性工程,我正在测试的一个想法是在数据帧中添加以前的对象作为列。我知道.shift()可以在熊猫身上实现这一点,但问题是我只在它符合特定条件时才观察它的移动

# add new column for previous value
df_labeled = df_labeled.sort_values(by=['ticker', 'periodDate']) #this ensures data/date are in order
df_labeled['lastValue'] = df_labeled['value'].shift(1) #add's previous value to current row
df_labeled[['ticker', 'periodDate', 'value', 'lastValue']]
它适用于第一项:

ticker  periodDate  value   lastValue
    Abc 2010    121000.0    NaN
    Abc 2011    125700.0    121000.0
    xyz 2010    125000.0    125700.0
    xyz 2011    125700.0    125000.0
正如您所看到的,xyz应该是NaN,但它是数据帧中最后一个项目的前一个值


有没有办法有条件地设定它?i、 e.如果
df_标签为['ticker']==df_标签为['ticker'].shift(1)

如果我理解正确,您希望根据
ticker
列移动
列:

df['lastValue'] = df.groupby(['ticker'], as_index=False)['value'].shift(1)
print(df)
印刷品:

  ticker  periodDate     value  lastValue
0    Abc        2010  121000.0        NaN
1    Abc        2011  125700.0   121000.0
2    xyz        2010  125000.0        NaN
3    xyz        2011  125700.0   125000.0

哇!谢谢我在寻找一个嵌套的循环或lambda方法来解决这个问题。这更容易,看起来也很漂亮。非常感谢。