2017-09-27 5 views
1

私は、start_dateが含まれる月に基づいて毎月の料金を合計する必要があるCSVを持っています。日付範囲に基づいて列を合計する方法--- 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を参照)を使用して、月、日、年の情報を取得し、最後にdatetimeを使用して変換します。 2)列が正しく変換されていると、特定のフレーム内で選択を行い、その結果の価格を合計することができます。 – jrd1

答えて

1

datetimeインデックス

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

そしてに変換、あなたが今python3

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

を使用していると仮定すると、インデックスとして開始日を作成します。

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 

それから、それらをグループ化してください!

関連する問題