我有一个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
答案 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'])
测试最后一步,看看它是否对您有用。 干杯