首页 > 解决方案 > 如何根据条件值对 pandas 进行转换?

问题描述

我正在尝试做一些特征工程,我正在测试的一个想法是将以前的观察添加为数据框中的一列。我知道 .shift() 可以在 pandas 中做到这一点,但问题是我只在它符合特定条件时才看到它移动。

# 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)

标签: pythonpandas

解决方案


如果我理解正确,您想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

推荐阅读