我有一张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
答案 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
然后去分组吧!