【问题标题】:Iterate through dataframe to extract delta of a particular time period遍历数据框以提取特定时间段的增量
【发布时间】:2021-02-04 17:11:35
【问题描述】:

我有一个文件 df,我希望获取每 7 天期间的增量并反映该特定期间的时间戳

df:

Date          Value
10/15/2020    75
10/14/2020    70
10/13/2020    65
10/12/2020    60
10/11/2020    55
10/10/2020    50
10/9/2020     45
10/8/2020     40
10/7/2020     35
10/6/2020     30
10/5/2020     25
10/4/2020     20
10/3/2020     15
10/2/2020     10
10/1/2020     5

所需的输出:

10/15/2020 到 10/9/2020 为 7 天,增量为:75 - 45 = 30 10/9/2020 时间戳将是:30 等等

Date          Value

10/9/2020     30
10/2/2020     30

这就是我正在做的:

df= df['Delta']=df.iloc[:,6].sub(df.iloc[:,0]),Date=pd.Series
(pd.date_range(pd.Timestamp('2020-10- 
15'), 
periods=7, freq='7d')))[['Delta','Date']]

我也认为我可以做到这一点:

编辑我将 callDate 更新为日期

for row in df.itertuples():
  Date = datetime.strptime(row.Date, "%m/%d/%y  %I:%M %p")
  previousRecord = df['Date'].shift(-6).strptime(row.Date, "%m/%d/%y  %I:%M 
  %p")
  Delta = Date - previousRecord

欢迎提出任何建议

【问题讨论】:

    标签: python pandas numpy loops


    【解决方案1】:

    你写的最后一段代码是我会做的。唯一的问题是在Delta = Date - previousRecord,这里没有什么叫Date。您应该改为访问与 callDate 关联的值。

    【讨论】:

    • 你好,我会改为callDate to Date。谢谢 让我试试这个
    【解决方案2】:

    不要遍历数据框。你可以使用merge:

    (df.merge(df.assign(Date=df['Date'] - pd.to_timedelta('6D')),
             on='Date')
       .assign(Value = lambda x: x['Value_y']-x['Value_x'])
       [['Date','Value']]
    )
    

    输出:

            Date  Value
    0 2020-10-09     30
    1 2020-10-08     30
    2 2020-10-07     30
    3 2020-10-06     30
    4 2020-10-05     30
    5 2020-10-04     30
    6 2020-10-03     30
    7 2020-10-02     30
    8 2020-10-01     30
    

    【讨论】:

    • 好的,谢谢@Quang Hoang,我会试试这个。你能告诉我这是每 7 天的增量吗?这最终是我希望发生的事情
    • pd.to_timedelta('6D')匹配实际需要6天时间10-15-2020匹配10-09-2020
    • 是的,10-08-2020 上的Value 是从10-14-2020 上的Value 中减去的,以此类推
    • 主要原因是迭代没有向量化,而merge是。
    • 日期时间类型需要Date。在该命令之前执行df['Date'] = pd.to_datetime(df['Date'])
    猜你喜欢
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-26
    • 2018-01-16
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    相关资源
    最近更新 更多