如何根据日期范围汇总一列--- Python3

时间:2017-09-27 20:42:08

标签: python python-3.x pandas pandas-groupby

我有一张CSV,我需要根据start_date所在的月份每月汇总费用。

Coverage Start Date更改为日期的最佳方式是什么,并使用Pandas对给定月份内的所有费用求和?

以下是数据在CSV中的显示方式:

Coverage Start Date     Coverage End Date       AMOUNT
20170902                20170930                0.37
20170905                20170930                11
20170815                20170831                0.37
20170909                20170930                0.37

2 个答案:

答案 0 :(得分:1)

假设您正在使用python3

data = {'Coverage Start Date': ['20170902', '20170905', `'20170815'],'Coverage End Date':['20170930', '20170930', '20170831'] , 'AMOUNT': [0.37, 11, 0.37]}`
df = pd.DataFrame(data)

现在,转换为datetime索引

df['Coverage End Date'] = pd.to_datetime(df['Coverage End Date'])
df['Coverage Start Date'] = pd.to_datetime(df['Coverage Start Date'])

然后,将您的开始日期创建为索引

df = df.set_index(df['Coverage Start Date'])

然后使用TimeGrouper

new_df = df.groupby(pd.TimeGrouper('M')).sum()

输出,

                        AMOUNT
Coverage Start Date
2017-08-31               0.37              
2017-09-30               11.37

答案 1 :(得分:0)

我喜欢i.n.n.m的代码。但是,要将日期时间功能应用于多个列,您可以使用以下

data = {'Coverage Start Date': ['20170902', '20170905', '20170815'],'Coverage End Date':['20170930', '20170930', '20170831'] , 'AMOUNT': [0.37, 11, 0.37]}
df = pd.DataFrame(data)
df.iloc[:, 1:] = df.iloc[:, 1:].apply(pd.to_datetime)

    AMOUNT  Coverage End Date   Coverage Start Date
0   0.37          2017-09-30            2017-09-02
1   11.00         2017-09-30            2017-09-05
2   0.37          2017-08-31            2017-08-15

然后去分组吧!