gpt4 book ai didi

python - Pandas 使用日期减去一些天数来连接历史数据

转载 作者:太空宇宙 更新时间:2023-11-03 14:37:05 25 4
gpt4 key购买 nike

我有一个数据框,其中一列是日期(即 5/29/2007),然后是 col A 和 col B 以及其他一些列。日期以及列 A 和列 B 的值唯一标识该行。我想将列添加到数据框中,这些列是其他列(不是 A 或 B)的历史值。例如我有一些行。将其称为 row i ,它具有 col D 的一些值。我想向数据框中添加一列,该列对应于前一天的 col D 的值。这是列 D 的值,其中行(称为行 j)的列 A 和列 B 的值与行 i 的值相同,但日期是第 i 行减去一天。我怎样才能有效地做到这一点?

此外,我想对多个列执行此操作,而不仅仅是 D 列。

这是我想要的示例。下面是我当前的数据框 csv。

Date, col-A, col-B, col-C, col-D
5/29/2007, A, B, 0, 1
5/29/2007, AA, Bf, 7, 124
5/29/2007, AV, Bf, 1, 4
5/30/2007, A, B, 10, 1
5/30/2007, AA, Bf, 3, 1
5/30/2007, AV, Bf, 1, 8

这是我希望数据框具有的所需输出数据

Date, col-A, col-B, col-C, col-D, col-D-1
5/30/2007, A, B, 10, 1, 1
5/30/2007, AA, Bf, 3, 1, 124
5/30/2007, AV, Bf, 1, 8, 4

最佳答案

我会创建一个移位副本,然后与原始副本合并。

# shifted copy
shiftInterval = pd.Timedelta('-1 days') # your X days interval
dfShifted = df.copy()
dfShifted['Date'] = dfShifted['Date'] - shiftInterval
dfShifted.drop(['col-C'], axis=1, inplace=True)

# merge, keeping only observations where -1 lag is present
df2 = pd.merge(df,
dfShifted,
on=['Date','col-A','col-B'],
how = 'inner', # use 'left' to keep observations without lags
suffixes=['','-1'])

df2
# Date col-A col-B col-C col-D col-D-1
#0 2007-05-30 A B 10 1 1
#1 2007-05-30 AA Bf 3 1 124
#2 2007-05-30 AV Bf 1 8 4

上述答案假设您有一个由以下内容创建的可重现的数据集:

from io import StringIO
import pandas as pd
from datetime import datetime

df = pd.read_csv(StringIO("""Date,col-A,col-B,col-C,col-D
5/29/2007,A,B,0,1
5/29/2007,AA,Bf,7,124
5/29/2007,AV,Bf,1,4
5/30/2007,A,B,10,1
5/30/2007,AA,Bf,3,1
5/30/2007,AV,Bf,1,8"""))

df['Date'] = df['Date'].apply(lambda x: datetime.strptime(x, '%m/%d/%Y'))

这是一种手动破解,因为已经有一个转变功能。我之前尝试过使用 pandas.DataFrame.shift()但无法使其与 freq 和索引一起使用。知道的人应该回答这个问题。

关于python - Pandas 使用日期减去一些天数来连接历史数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46851293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com