2017-12-23 7 views
0

이 파일을 읽고 쓰는 데 드는 비용 파일을 가지고 있습니다. 일일 로그를 만듭니다. 수년에 걸쳐 확장 파일의 작은 부분 집합 내가 검사 및 저축의 시작 값을 포함하는 변수 checking_startsavings_start로 시작하는 내 코드에서데이터 프레임 형식의 팬다스 비용 파일에서 일일 계정 로그 만들기

Date,Checking_Debit,Checking_Addition,Savings_Debit,Savings_Addition 
2015-01-07,342.1,0.0,0.0,0.0 
2015-01-07,981.0,0.0,0.0,0.0 
2015-01-07,3185.0,0.0,0.0,0.0 
2015-01-05,55.0,0.0,0.0,0.0 
2015-01-05,75.0,0.0,0.0,0.0 
2015-01-03,287.0,0.0,0.0,0.0 
2015-01-02,64.8,0.0,0.0,0.0 
2015-01-02,75.0,0.0,0.0,75.0 
2015-01-02,1280.0,0.0,0.0,0.0 
2015-01-02,245.0,0.0,0.0,0.0 
2015-01-01,45.0,0.0,0.0,0.0 

2015 년 1 월에 몇 일 동안, 다음과 같습니다 계정. 코드에 시작일과 종료일을 지정하고 코드가 매일 반복되도록하고, 그 날 비용이 있는지 확인한 다음 확인 및 저축 빚을 뺀 다음 확인 및 절감액을 추가합니다. 당일 비용이 없다면 전날과 동일한 금액으로 계좌를 유지해야합니다. 또한, 구현에서 팬더 데이터 프레임에 자신을 제약하려고합니다. 지금까지 내 코드는 이렇게 보입니다. 다음 해당 날짜에 비용 또는 비용이 있다면 나는 종료 날짜에 시작 날짜에서 걸을 어떻게 팬더 모듈과 파이썬 형식에서

import pandas as pd 
from date time import date 
check_start = 8500.0 
savings_start = 4000.0 
start_date = date(2017, 1, 1) 
end_date = date(2017, 1, 8) 
df = pd.read_csv(file_name.csv, dtype={'Date': str, 'Checking_Debit': float, 
             'Checking_Addition': float, 
             'Savings_Debit': float, 
             'Savings_Addition': float}) 

은 한 번에 하나의 일, 다음 참조 그 돈을 저축과 저축에서 뺍니다. 결국 나는 각 날짜에 당좌 예금 계좌의 가치에 대한 배열을 가져야하고 당일 저축 예금 계좌에 대한 배열을 가져야합니다.

결과는 다음과 같은 형식의 .csv 파일로 작성된 배열이어야합니다. 사용자가 제공 한 데이터를 읽고 더 나은 데이터 조작에 대한 지표로는

import pandas as pd 

df = pd.read_csv(r"dat.csv", parse_dates=[0],dtype={'Checking_Debit': float, 
                   'Checking_Addition': float, 
                   'Savings_Debit': float, 
                   'Savings_Addition': float}) 

날짜 설정과 데이터의 날짜 열을 식별하여

Date,Checking,Savings 
2017-01-07,1865.1,3925.0 
2017-01-06,6373.2,3925.0 
2017-01-05,6373.2,3925.0 
2017-01-04,6503.2,3925.0 
2017-01-03,6503.2,3925.0 
2017-01-02,6790.2,3925.0 
2017-01-01,8455.0,4000.0 
+0

출력을 어떻게 표시해야합니까? –

+0

물론, 원하는 출력을 추가했습니다. – Jon

+0

지금까지 시도한 것은 무엇입니까? 게시 한 유일한 코드는 실제로이 목표에 대한 시도를 보여주지 않으며 CSV를로드하고 변수를 설정합니다. –

답변

1

시작. 루프에 대한

df = df.set_index("Date") 

초기화 모든 변수

check_start = 8500.0 
savings_start = 4000.0 
start_date = pd.to_datetime('2015/1/1') 
end_date = pd.to_datetime('2015/1/8') 
delta = pd.Timedelta('1 days') # time that needs to be added to start date 

해주기 그룹 매일 지출 보고서를 작성을 위해 우리가 while 루프를 할 것입니다 각 날짜 이제

grp_df = df.groupby('Date').sum() 

에 비용 데이터 WRT

expense_report = [] 
while start_date<=end_date: 
    if start_date in df.index: 
     savings_start += (grp_df.loc[start_date,"Savings_Addition"]-grp_df.loc[start_date,"Savings_Debit"]) 
     check_start += (grp_df.loc[start_date,"Checking_Addition"]-grp_df.loc[start_date,"Checking_Debit"]) 
     expense_report.append([start_date,check_start,savings_start]) 
    elif start_date not in df.index: 
     expense_report.append([start_date,check_start,savings_start]) 

    start_date += delta 

변환 expense_report 목록 Dataframe

df_exp_rpt = pd.DataFrame(expense_report,columns=["Date","Checking","Savings"]) 



print(df_exp_rpt) 
     Date Checking Savings 
0 2015-01-01 8455.0 4000.0 
1 2015-01-02 6790.2 4075.0 
2 2015-01-03 6503.2 4075.0 
3 2015-01-04 6503.2 4075.0 
4 2015-01-05 6373.2 4075.0 
5 2015-01-06 6373.2 4075.0 
6 2015-01-07 1865.1 4075.0 
7 2015-01-08 1865.1 4075.0 

당신은

df_exp_rpt.to_csv("filename.csv") 

참고로 CSV로 저장할 수 있습니다 팬더하기 : 원본에서 saving_addition 열에서 75 값을 가질 수 있기 때문에 절약 열 값은 4075 대신 3925.0있다 데이터

+0

감사 Sahil, 이것은 좋은 출발이지만, 나는 지금까지 가지고있는 것과 같은 문제로 달려 가고있다. 그 당시에는 비용이 없었기 때문에 1 월 4 일과 1 월 6 일에는 솔루션이 누락되었습니다. 그러나 당신의 솔루션을 보면, if if start_date in df 다음에 else 문을 둘 수 있습니다.index' 라인을 사용하여 그 문제를 처리 할 수 ​​있어야합니다. – Jon

+0

@ 존 나는 그것을 반영하기 위해 나의 대답을 업데이트했다. –