2017-09-27 93 views
1

我有一個CSV,我需要根據start_date所在的月份來計算每月的費用。如何基於日期範圍對列進行求和--- Python3

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

2步驟:1)使用對應於您要修改的列的轉換器(請參閱:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html),然後提取月份,日期,年份信息,最後使用日期時間轉換。 2)正確轉換您的列後,您可以在給定框架內進行選擇,然後在結果中對價格進行求和。 – jrd1

回答

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 
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 

然後去了解它們分組!