熊猫 - 按月收集?

时间:2014-03-10 18:04:32

标签: python pandas dataframe

我有一个如下所示的数据框:

Date          n
2014-02-27    4
2014-02-28    5
2014-03-01    1
2014-03-02    6
2014-03-03    7

我正试图找到一个看起来像这样的

Date          n    csn
2014-02-27    4    4
2014-02-28    5    9
2014-03-01    1    1
2014-03-02    6    7
2014-03-03    7    14

...即。我想要一个月内运行总计的列,我想让它从每个月开始。我怎么能这样做?

2 个答案:

答案 0 :(得分:6)

使用.groupby(),但不要只按月分组,groupby年 - 月。否则2013-02将与2014-02等在同一组中。

In [96]:

df['Month']=df['Date'].apply(lambda x: x[:7])
In [97]:

df['csn']=df.groupby(['Month'])['n'].cumsum()
In [98]:

print df
         Date  n    Month  csn
0  2014-02-27  4  2014-02    4
1  2014-02-28  5  2014-02    9
2  2014-03-01  1  2014-03    1
3  2014-03-02  6  2014-03    7
4  2014-03-03  7  2014-03   14

[5 rows x 4 columns]

答案 1 :(得分:4)

如果您正在进行时间序列工作,我建议您使用DatetimeIndex。在此示例中,您可以使用TimeGrouper按月分组(按年度分组,如重新采样):

In [11]: g = df.groupby(pd.TimeGrouper('M'))

In [12]: g['n'].cumsum()
Out[12]: 
Date
2014-02-27     4
2014-02-28     9
2014-03-01     1
2014-03-02     7
2014-03-03    14
dtype: int64

In [13]: df['csn'] = g['n'].cumsum()

注意:如果您尚未使用DatetimeIndex,请调用to_datetime函数并设置索引:

df['Date'] = pd.to_datetime(df['Date'])
df.set_index('Date', inplace=True)