我有一个DataFrame,其日期为索引,我想进行操作"获取最近2天的总和"在每一天:
A
2015-11-01 1
2015-11-02 3
2015-11-03 2
2015-11-04 4
2015-11-05 1
2015-11-06 2
目标是:
Lastest_2_days_A
2015-11-01 1
2015-11-02 4
2015-11-03 5
2015-11-04 6
2015-11-05 5
2015-11-06 3
我认为TimeGrouper可能有所帮助。但是当我使用TimeGrouper并将freq设置为" 2D":
时import numpy as np
import pandas as pd
rng = pd.date_range('2015-11-01', periods=6)
df = pd.DataFrame(np.random.randn(6,1), index=rng, columns=["A"]).applymap(lambda x:int(x))
df.groupby(pd.TimeGrouper(freq="2D", closed='right')).sum()
结果将是:
A
2015-10-30 1
2015-11-01 5
2015-11-03 5
2015-11-05 2
很明显,在TimeGrouper中,结果中的索引之间没有任何重叠,而我需要的是每天执行最新的N天总和操作。有可能做这个操作吗?任何建议都将非常感谢!
答案 0 :(得分:0)
对于这样的简单案例,shift
就足够了:
In [6]:
print df
A
2015-11-01 1
2015-11-02 3
2015-11-03 2
2015-11-04 4
2015-11-05 1
2015-11-06 2
In [7]:
print df + df.shift(1).fillna(0)
A
2015-11-01 1
2015-11-02 4
2015-11-03 5
2015-11-04 6
2015-11-05 5
2015-11-06 3
更一般地说,这是rolling
apply的情况,min_periods
控制将被视为有效的最小窗口。在这种情况下跳过它将导致第一个单元格nan
:
In [8]:
print pd.rolling_sum(df,window=2,min_periods=1)
A
2015-11-01 1
2015-11-02 4
2015-11-03 5
2015-11-04 6
2015-11-05 5
2015-11-06 3