Python 如何根据条件值对熊猫进行转换?
我正在尝试做一些特性工程,我正在测试的一个想法是在数据帧中添加以前的对象作为列。我知道.shift()可以在熊猫身上实现这一点,但问题是我只在它符合特定条件时才观察它的移动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'] =
# 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方法来解决这个问题。这更容易,看起来也很漂亮。非常感谢。