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
基本上,固定日期后的差值要累计求和,固定日期前的差值要累计减去
我目前的解决办法是:
一些启动程序代码:
您可以创建条件并通过它们应用函数:
#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