我正在尝试进行一些功能设计,而我正在测试的想法之一是在数据框中添加以前的观察值作为一列。我知道.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,但它是数据框中最后一个项目之前的值。
是否可以有条件地进行设置?即df_labeled['ticker'] == df_labeled['ticker'].shift(1)
答案 0 :(得分:1)
如果我对您的理解正确,那么您想根据value
列来移动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