总结了跨两年大熊猫的一年的数据,

时间:2019-05-10 22:33:09

标签: python-3.x pandas

我有一个DataFrame,其中包含与此类似的数据:

Name    Date        A   B   C
John    19/04/2018  10  11  8
John    20/04/2018  9   7   9
John    21/04/2018  22  15  22
…   …       …   …   …
John    16/04/2019  8   8   9
John    17/04/2019  10  11  18
John    18/04/2019  8   9   11
Rich    19/04/2018  18  7   6
…   …       …   …   …
Rich    18/04/2019  19  11  17

数据可以在任何一天开始,并且至少包含365天,有时甚至更多。我要结束的是一个像这样的DataFrame:

Name    Date    Sum
John    April   356
John    May     276
John    June    209
Rich    April   452

我需要对所有月份进行汇总以得出一年的数据(4月至3月),但是我需要能够处理从2018年到2019年的四月总数(在此示例中),从2019年开始。我还想做的是改变日期,使它们连续并按顺序执行,而不是:

John    16/04/2019  8   8   9   Tuesday
John    17/04/2019  10  11  18  Wednesday
John    18/04/2019  8   9   11  Thursday
John    19/04/2019  10  11  8   Thursday (was 19/04/2018)
John    20/04/2019  9   7   9   Friday (was 20/04/2018)

它变成

John    16/04/2019  8   8   9   Tuesday
John    17/04/2019  10  11  18  Wednesday
John    18/04/2019  8   9   11  Thursday
John    19/04/2019  9   7   9   Friday (was 20/04/2018)

在求和之前获得最终的DataFrame。这可能吗?

评论中要求的其他信息

这是指向初始数据集https://github.com/stottp/exampledata/blob/master/SOExample.csv的链接,所需的输出为:

Name Month Total 
John March  11634 
John April  11470 
John May    11757 
John June   10968 
John July   11682 
John August 11631 
John September 11085 
John October 11924 
John November 11593 
John December 11714 
John January 11320 
John February 10167 
Rich March 11594 
Rich April 12383 
Rich May 12506 
Rich June 11112 
Rich July 11636 
Rich August 11303 
Rich September 10667 
Rich October 10992 
Rich November 11721 
Rich December 11627 
Rich January 11669 
Rich February 10335

1 个答案:

答案 0 :(得分:0)

让我们看看我是否理解正确。如果要求和,我想是指每天对['A','B','C']列的值求和,然后每月获取总值。

如果是正确的话,首先要做的是将['Date']列设置为索引,以便更轻松地使用数据框:

df.set_index(df['Date'], inplace=True, drop=True)
del df['Date']

接下来,您将希望通过重新采样数据框(从几天到几个月)来添加新列['Sum'],同时将['A','B','C']的值相加:

df['Sum'] = df['A'].resample('M').sum() + df['B'].resample('M').sum() + df['C'].resample('M').sum()
df['Sum'].head()

Out[37]: 
Date
2012-11-30    1956265
2012-12-31    2972076
2013-01-31    2972565
2013-02-28    2696121
2013-03-31    2970687
Freq: M, dtype: int64

关于将2018年2月和2019年2月压榨在一起的最后一部分(好像是一个月)可能来自:

df['2019-02'].merge(df['2018-02'], how='outer', on=['Date', 'A', 'B', 'C'])

测试最后一步,看看它是否对您有用。 干杯