【问题标题】:How can I do a shift in pandas based on conditonal values?如何根据条件值对 pandas 进行转换?
【发布时间】:2020-10-12 03:15:06
【问题描述】:

我正在尝试做一些特征工程,我正在测试的一个想法是将以前的观察添加为数据框中的一列。我知道 .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)

【问题讨论】:

    标签: python pandas


    【解决方案1】:

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

    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 方法。这更容易,看起来很漂亮。谢谢。
    猜你喜欢
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2016-10-23
    • 2017-05-29
    • 1970-01-01
    • 2021-07-19
    • 2021-08-14
    • 2018-02-02
    相关资源
    最近更新 更多