【问题标题】:Pandas: Creating New Column for Previous Week Values with Multiple IDsPandas:为具有多个 ID 的前一周值创建新列
【发布时间】:2021-06-12 19:19:07
【问题描述】:

我正在处理时间序列数据。我需要找到每个条目的前一周值。我的数据有 3 列:ID、日期和值。我想为 LWValue(上周的值)创建第 4 列。示例数据如下所示:

    ID  Date  Value  
0    1  2/1/2020     100       
1    2  2/1/2020     80      
2    1  2/2/2020     105       
3    2  2/2/2020     84       
4    1  2/8/2020     102       
5    2  2/8/2020    82       
6    1  2/9/2020    104       
7    2  2/9/2020     86  

Sample Data Image

我将如何在 Pandas 中执行此操作?

我试过了:

# create new column
df["LWValues"] = pd.Series()  

# test out code on same values
df.loc[((df.ID == df.ID) & (df.Date == (df.Date) )), "LWValues"].values

# test out code with timedelta grabbing last week
df.loc[((df.ID == df.ID) & (df.Date == (df.Date - datetime.timedelta(days=7)) )), "LWValues"].values

当我这样做时,第二个操作有效,但最后一个操作,尝试使用 timedelta 参数从前一周提取数据没有。相反,我得到一个空数组。

我需要如何修复此代码?

或者,有没有比这更好的方法在 Pandas 中获取前一周的数据?

【问题讨论】:

  • 请将您的示例数据添加为文本

标签: python pandas time-series


【解决方案1】:

df.loc 不是这样工作的。在您的情况下,它只是将每一行与其自身进行比较。一种方法是使用 apply。

df.apply(lambda row : df.loc[(df.ID == row['ID']) & (df.Date == (row['Date'] - datetime.timedelta(days=7)))]['Value'], axis=1)

不要忘记处理没有上周条目的情况。

【讨论】:

    猜你喜欢
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 2015-11-15
    • 2013-11-23
    • 2019-12-26
    • 2019-04-17
    相关资源
    最近更新 更多