【问题标题】:Python delta for 7 day difference7天差异的Python增量
【发布时间】:2020-10-21 05:54:13
【问题描述】:

我有一个数据框 df,我想计算 7 天时间段内的增量:

  Monday   Tuesday   Wednesday   Thursday   Friday    Sat     Sun   

  5        10         15         20         25        30      35

  1        2          3           4         5         6       7

我想找到第一行的增量,从星期一 (5) 开始,到星期日 (35) 结束

前 7 天时间段的增量为: 35 - 5 = 30

接下来的 7 天窗口增量为: 7 - 1 = 6 以此类推

日期将从 2020 年 1 月 1 日开始以 7 天或每周为增量继续

期望的输出:(带有新创建的日期和增量列的新数据框)

   Date                  Delta

   1/1/2020              30
   1/8/2020              6

这就是我正在做的:

  import pandas as pd
  import numpy as np

  df = pd.read_csv('df.csv')

  df['Delta'] = df['Sunday'] - df['Monday]
  df['Date'] = pd.date_range(start='1/1/2020', periods=len(df), freq='Weeks')




 df2.to_csv('df2.csv')

欢迎提出任何建议

【问题讨论】:

    标签: python pandas numpy


    【解决方案1】:

    让我们尝试通过在freq 中合并倍数来计算date_range

    df['Delta']=df.Sun.sub(df.Monday)
    df['Date']=pd.Series(pd.date_range(pd.Timestamp('2020-01-01'), periods=7, freq='7d'))
    

    或者干脆

    df=df.assign(Delta=df.Sun.sub(df.Monday),Date=pd.Series\
    (pd.date_range(pd.Timestamp('2020-01-01'), periods=7, freq='7d')))
    
    
    
      Monday  Tuesday  Wednesday  Thursday  Friday  Sat  Sun  Delta       Date
    0       5       10         15        20      25   30   35     30    2020-01-01
    1       1        2          3         4       5    6    7      6     2020-01-08
    

    【讨论】:

    • 这很有帮助。让我也试试这个。谢谢@wwnde 有没有办法只用日期和增量来制作新的数据框(不包括周一至周日的其他日子?)
    • 是的,只需调用最后的列列表即可。请尝试df=df.assign(Delta=df.Sun.sub(df.Monday),Date=pd.Series\ (pd.date_range(pd.Timestamp('2020-01-01'), periods=7, freq='7d')))[['Delta','Date']]
    • 还有一个问题。假设我不知道列名,我想将 Delta 与索引一起使用。我会只是 Delta=df[8].sub(df.[0]) ???我也可以这样做吗? @wwnde
    • 使用整数 loc 访问器,df['Delta']=df.iloc[:,6].sub(df.iloc[:,0])i 表示整数,: 表示所有行,06 是列索引
    • @baxx 我相信这就是pd.Series 所做的。它将输出锁定到现有索引。来自文档Labels need not be unique but must be a hashable type. The object supports both integer- and label-based indexing and provides a host of methods for performing operations involving the index. Statistical methods from ndarray have been overridden to automatically exclude missing data (currently represented as NaN).
    【解决方案2】:
    # necessary imports
    import datetime
    import pandas
    

    可以做到:

    numdays=5
    base = datetime.datetime(2020,1,1)
    date_list = [base + datetime.timedelta(days=7*x) for x in range(numdays)]
    

    然后:

    df=pd.DataFrame({'Date':date_list})
    

    如果你有另一个值列表,即Deltas_list,你想包含在这个数据框中:

    Deltas_list=[0,1,2,3,4]
    Deltas=pd.Series(Deltas_list)
    df['Delta']=Deltas
    

    df 将是:

        Date    Delta
    0   2020-01-01  0
    1   2020-01-08  1
    2   2020-01-15  2
    3   2020-01-22  3
    4   2020-01-29  4
    

    【讨论】:

    • 谢谢-我会努力的。这段代码看起来像它创建的日期增量正确吗?它也会显示增量吗?
    • 不,不幸的是,不是增量。我不太明白你所说的三角洲是什么意思。你能试着用其他方式向我解释吗?
    • 是的,如果我不清楚,我很抱歉。它只是取第 1 天列中的任何值和第 7 天列中的任何值的增量 - 第 1 天是星期一,第 7 天是星期日
    • 哦,好的!但是,如果您要增加 7 天差中的天数,所有天数都将是同一天(即星期一或星期二或星期三或...),那么您是否希望所有增量都相同?
    • 我没有得到这部分:35 - 5 = 30; 7 - 1 = 6:这些数字 (35,5,7,1) 是从哪里来的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-29
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    相关资源
    最近更新 更多