In [11]: df1
Out[11]:
abc xyz
Date
2013-06-01 100 200
2013-06-03 -20 50
2013-08-15 40 -5
2014-01-20 25 15
2014-02-21 60 80
In [12]: g = df1.groupby(pd.Grouper(freq="M")) # DataFrameGroupBy (grouped by Month)
In [13]: g.sum()
Out[13]:
abc xyz
Date
2013-06-30 80 250
2013-07-31 NaN NaN
2013-08-31 40 -5
2013-09-30 NaN NaN
2013-10-31 NaN NaN
2013-11-30 NaN NaN
2013-12-31 NaN NaN
2014-01-31 25 15
2014-02-28 60 80
In [14]: df1.resample("M", how='sum') # the same
Out[14]:
abc xyz
Date
2013-06-30 40 125
2013-07-31 NaN NaN
2013-08-31 40 -5
2013-09-30 NaN NaN
2013-10-31 NaN NaN
2013-11-30 NaN NaN
2013-12-31 NaN NaN
2014-01-31 25 15
2014-02-28 60 80
In [21]: df
Out[21]:
Date abc xyz
0 2013-06-01 100 200
1 2013-06-03 -20 50
2 2013-08-15 40 -5
3 2014-01-20 25 15
4 2014-02-21 60 80
In [22]: pd.DatetimeIndex(df.Date).to_period("M") # old way
Out[22]:
<class 'pandas.tseries.period.PeriodIndex'>
[2013-06, ..., 2014-02]
Length: 5, Freq: M
In [23]: per = df.Date.dt.to_period("M") # new way to get the same
In [24]: g = df.groupby(per)
In [25]: g.sum() # dang not quite what we want (doesn't fill in the gaps)
Out[25]:
abc xyz
2013-06 80 250
2013-08 40 -5
2014-01 25 15
2014-02 60 80
Date abc xyz year month day YearMonth
0 01-Jun-13 100 200 13 Jun 01 Jun-13
1 03-Jun-13 -20 50 13 Jun 03 Jun-13
2 15-Aug-13 40 -5 13 Aug 15 Aug-13
3 20-Jan-14 25 15 14 Jan 20 Jan-14
4 21-Feb-14 60 80 14 Feb 21 Feb-14
您可以在groupby(..)项中浏览不同的组李>
在本例中,我们按两列进行分组:
for key,g in df.groupby(['year','month']):
print key,g
输出:
('13', 'Jun') Date abc xyz year month day YearMonth
0 01-Jun-13 100 200 13 Jun 01 Jun-13
1 03-Jun-13 -20 50 13 Jun 03 Jun-13
('13', 'Aug') Date abc xyz year month day YearMonth
2 15-Aug-13 40 -5 13 Aug 15 Aug-13
('14', 'Jan') Date abc xyz year month day YearMonth
3 20-Jan-14 25 15 14 Jan 20 Jan-14
('14', 'Feb') Date abc xyz year month day YearMonth
在本例中,我们按一列进行分组:
for key,g in df.groupby(['YearMonth']):
print key,g
输出:
Jun-13 Date abc xyz year month day YearMonth
0 01-Jun-13 100 200 13 Jun 01 Jun-13
1 03-Jun-13 -20 50 13 Jun 03 Jun-13
Aug-13 Date abc xyz year month day YearMonth
2 15-Aug-13 40 -5 13 Aug 15 Aug-13
Jan-14 Date abc xyz year month day YearMonth
3 20-Jan-14 25 15 14 Jan 20 Jan-14
Feb-14 Date abc xyz year month day YearMonth
4 21-Feb-14 60 80 14 Feb 21 Feb-14
为什么不简单点
给你
然后你可以用
您可以使用重采样或
Grouper
(在引擎盖下重采样)首先确保datetime列实际上是datetimes(用
pd.to_datetime
点击它)。如果是DatetimeIndex,则更容易:注:以前
pd.Grouper(freq="M")
写为pd.TimeGrouper("M")
。后者现在从0.21开始就被弃用了我原以为下面的方法行得通,但行不通(因为
as_index
没有得到尊重?我不确定)。为了利益,我把这个包括在内如果它是一列(必须是datetime64列!如我所说,用
to_datetime
点击它),您可以使用PeriodIndex:为了得到期望的结果,我们必须重新索引
有不同的方法可以做到这一点
year
、month
、day
和yearMonth
。在你的情况下,你需要两者中的一个。您可以使用两列'year','month'
或一列yearMonth
进行分组输出:
在本例中,我们按两列进行分组:
输出:
在本例中,我们按一列进行分组:
输出:
get_group
输出:
get_group
。这种方法有助于过滤值并获得分组值李>这也会产生同样的结果
输出:
您可以在
Jun-13
期间选择abc
或xyz
值列表输出:
您可以使用它来查看您分类为“年-月”的日期,并在其上应用cretiria以获取相关数据
我还建议检查这个answer
相关问题 更多 >
编程相关推荐