Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫:过去和未来的康姆苏姆_Python_Pandas_Cumsum - Fatal编程技术网

Python 熊猫:过去和未来的康姆苏姆

Python 熊猫:过去和未来的康姆苏姆,python,pandas,cumsum,Python,Pandas,Cumsum,给定一个固定时间的单一值: 2010-06-01 : 100 以及该值在过去和未来(相对于固定日期)发生的变化列表: 我希望得到以下结果: Date Value 2010-04-01 50 2010-05-01 80 2010-06-01 100 2010-07-01 160 2010-08-01 170 基本上,固定日期后的差值要累计求和,固定日期前的差值要累计减去 我目前的解决办法是: 将差异数据帧过滤为两个:一个包含过去值,另一个包含未来值 对过去的

给定一个固定时间的单一值:

2010-06-01 : 100
以及该值在过去和未来(相对于固定日期)发生的变化列表:

我希望得到以下结果:

Date         Value
2010-04-01   50
2010-05-01   80
2010-06-01   100
2010-07-01   160
2010-08-01   170
基本上,固定日期后的差值要累计求和,固定日期前的差值要累计减去

我目前的解决办法是:

  • 将差异数据帧过滤为两个:一个包含过去值,另一个包含未来值

  • 对过去的DF求反,将其附加到当前DF,按降序排序,然后进行求和

  • 获取未来的DF,将其附加到当前DF,升序排序,然后进行求和

  • 将所有内容附加在一起


  • 一些启动程序代码:


    您可以创建条件并通过它们应用函数:

    #convert to datetimes
    df1.Date = pd.to_datetime(df1.Date)
    df2.Date = pd.to_datetime(df2.Date)
    #join together
    df = (pd.concat([df1, df2.rename(columns={'Value':'Diff'})])
           .sort_values('Date')
           .reset_index(drop=True))
    print (df)
            Date  Diff
    0 2010-04-01    30
    1 2010-05-01    20
    2 2010-06-01   100
    3 2010-07-01    60
    4 2010-08-01    10
    
    m1 = df.Date < df2.loc[0, 'Date']
    m2 = ~m1
    #condition for select only appended value
    m3 = m2[[m2.idxmax()]]
    print (m3)
    2    True
    Name: Date, dtype: bool
    
    pd.DataFrame({'Date': ['2010-04-01', '2010-05-01', '2010-07-01', '2010-08-01'], 'Diff': [30,20,60,10]})
    
    pd.DataFrame({'Date': ['2010-06-01'], 'Value': [100]})
    
    #convert to datetimes
    df1.Date = pd.to_datetime(df1.Date)
    df2.Date = pd.to_datetime(df2.Date)
    #join together
    df = (pd.concat([df1, df2.rename(columns={'Value':'Diff'})])
           .sort_values('Date')
           .reset_index(drop=True))
    print (df)
            Date  Diff
    0 2010-04-01    30
    1 2010-05-01    20
    2 2010-06-01   100
    3 2010-07-01    60
    4 2010-08-01    10
    
    m1 = df.Date < df2.loc[0, 'Date']
    m2 = ~m1
    #condition for select only appended value
    m3 = m2[[m2.idxmax()]]
    print (m3)
    2    True
    Name: Date, dtype: bool
    
    #multiple by -1 by condition m1
    df.loc[m1, 'Diff'] *= -1
    #chained m1 and m3 for inverse cumulative sum
    df.loc[m1 | m3, 'Diff'] = df.loc[m1 | m3, 'Diff'].iloc[::-1].cumsum()
    #classic cumsum
    df.loc[m2, 'Diff'] = df.loc[m2, 'Diff'].cumsum()
    print (df)
    
            Date  Diff
    0 2010-04-01    50
    1 2010-05-01    80
    2 2010-06-01   100
    3 2010-07-01   160
    4 2010-08-01   170