728x90
반응형
(문제)
3가지 파일을 합치려고 합니다.
데이터는 아래와 같이 a,b,c 3개의 파일의 일부만 게시했습니다.
보시다시피 저는 2015년~2023년의 각 월별 1일에 맞추어 b,c를 합치고 싶은데,
문제는 월별데이터인 a와 달리 b와 c는 일별 데이터라 1일에 데이터가 열외된 경우도 있다는 것입니다.
b와 c에 1일의 데이터가 없는경우 b,c에서 1일에 가장 가까운 2~3일이나 전월 30~31일의 데이터로 채워서 합치고 싶은데 방법을 잘 모르고 있습니다.
해당 코드를 알려주시면 좋을 것 같습니다!
(코드에 주석도 달아주세요)
DATE | a |
2023-03-01 | 5.2 |
2023-02-01 | 5.9 |
2023-01-01 | 6.34716 |
2022-12-01 | 6.44494 |
2022-11-01 | 7.13535 |
2022-10-01 | 7.76249 |
2022-09-01 | 8.21485 |
2022-08-01 | 8.22736 |
2022-07-01 | 8.41318 |
2022-06-01 | 8.93299 |
2022-05-01 | 8.50233 |
2022-04-01 | 8.22777 |
2022-03-01 | 8.51522 |
2022-02-01 | 7.95485 |
2022-01-01 | 7.59528 |
2021-12-01 | 7.19446 |
2021-11-01 | 6.86239 |
2021-10-01 | 6.23775 |
2021-09-01 | 5.38363 |
2021-08-01 | 5.18829 |
2021-07-01 | 5.22151 |
2021-06-01 | 5.28161 |
2021-05-01 | 4.91503 |
2021-04-01 | 4.13055 |
2021-03-01 | 2.63052 |
2021-02-01 | 1.69336 |
DATE | b |
2023-03-01 | 1844.9 |
2023-02-09 | 1,866.20 |
2023-02-08 | 1,877.40 |
2023-02-07 | 1,871.70 |
2023-02-06 | 1,866.20 |
2023-02-03 | 1,862.90 |
2023-02-02 | 1,916.30 |
2023-02-01 | 1,927.80 |
2023-01-31 | 1,929.50 |
2023-01-30 | 1,922.90 |
2023-01-27 | 1,928.60 |
2023-01-26 | 1,929.10 |
2023-01-25 | 1,941.20 |
2023-01-24 | 1,933.90 |
2023-01-23 | 1,927.10 |
2023-01-20 | 1,926.40 |
2023-01-19 | 1,922.10 |
2023-01-18 | 1,904.40 |
2023-01-17 | 1,907.20 |
2023-01-16 | 1,912.40 |
2023-01-13 | 1,918.40 |
2023-01-12 | 1,895.50 |
2023-01-11 | 1,874.60 |
2023-01-10 | 1,871.60 |
2023-01-09 | 1,872.70 |
2023-01-06 | 1,864.20 |
2023-01-05 | 1,834.80 |
2023-01-04 | 1,852.80 |
2023-01-03 | 1,839.70 |
2023-01-02 | - |
2022-12-30 | 1,819.70 |
2022-12-29 | 1,819.50 |
2022-12-28 | 1,807.90 |
DATE | c |
2023-05-09 | 3.496 |
2023-05-08 | 3.507 |
2023-05-07 | 3.45 |
2023-05-05 | 3.435 |
2023-05-04 | 3.377 |
2023-05-03 | 3.364 |
2023-05-02 | 3.433 |
2023-05-01 | 3.57 |
2023-04-28 | 3.433 |
2023-04-27 | 3.528 |
2023-04-26 | 3.445 |
2023-04-25 | 3.4 |
2023-04-24 | 3.496 |
2023-04-21 | 3.568 |
2023-04-20 | 3.536 |
2023-04-19 | 3.591 |
2023-04-18 | 3.578 |
2023-04-17 | 3.606 |
2023-04-14 | 3.515 |
2023-04-13 | 3.449 |
2023-04-12 | 3.4 |
2023-04-11 | 3.432 |
2023-04-10 | 3.415 |
2023-04-07 | 3.413 |
2023-04-06 | 3.303 |
2023-04-05 | 3.309 |
2023-04-04 | 3.339 |
2023-04-03 | 3.415 |
2023-03-31 | 3.473 |
2023-03-30 | 3.547 |
2023-03-29 | 3.566 |
2023-03-28 | 3.572 |
2023-03-27 | 3.539 |
2023-03-24 | 3.372 |
2023-03-23 | 3.414 |
2023-03-22 | 3.451 |
2023-03-21 | 3.608 |
2023-03-20 | 3.483 |
2023-03-17 | 3.438 |
2023-03-16 | 3.579 |
2023-03-15 | 3.462 |
2023-03-14 | 3.685 |
2023-03-13 | 3.545 |
2023-03-10 | 3.704 |
2023-03-09 | 3.907 |
2023-03-08 | 3.989 |
2023-03-07 | 3.97 |
2023-03-06 | 3.964 |
2023-03-03 | 3.958 |
2023-03-02 | 4.062 |
2023-03-01 | 3.994 |
2023-02-28 | 3.928 |
(방법)
import pandas as pd
a_df = pd.read_csv('data_a.txt',delimiter='\t') # 파일 읽기
b_df = pd.read_csv('data_b.txt',delimiter='\t')
c_df = pd.read_csv('data_c.txt',delimiter='\t')
a_df['yymm'] = a_df['DATE'].str.slice(start=0, stop=7) # yymm으로 2023-01 형태로 분리해 새로운 컬럼 만듬
b_df['yymm'] = b_df['DATE'].str.slice(start=0, stop=7)
c_df['yymm'] = c_df['DATE'].str.slice(start=0, stop=7)
last_yymm = ''
for i in range(len(b_df)-1, -1, -1): # b에서 월의 첫번째 데이터만 남김
if last_yymm != b_df.iloc[i]['DATE'][:7]:
last_yymm = b_df.iloc[i]['DATE'][:7]
else:
b_df.drop(i, axis=0, inplace=True)
last_yymm = ''
for i in range(len(c_df)-1, -1, -1): # c에서 월의 첫번째 데이터만 남김
if last_yymm != c_df.iloc[i]['DATE'][:7]:
last_yymm = c_df.iloc[i]['DATE'][:7]
else:
c_df.drop(i, axis=0, inplace=True)
df = pd.merge(a_df,b_df, how='outer',on='yymm') # dataframe merge, yymm 컬럼을 중심으로 merge
df = pd.merge(df, c_df, how='outer',on='yymm')
df가 아래와 같이 만들어 집니다. 이후 가공해서 사용하면 됩니다.
728x90
반응형
'프로그램' 카테고리의 다른 글
[C언어] 문제 : 키와 체중을 입력 받아 BMI 계산하고, 비만 구분 (0) | 2023.05.10 |
---|---|
[C언어] 문제 : 4개의 정수 입력 받아 가장 작은 수 찾기 (0) | 2023.05.10 |
[파이썬] 문제 : 여러 데이터가 있는 text 파일에서 데이터 추출하기(파싱) (0) | 2023.05.09 |
[파이썬] 문제 : 터틀(turtle) 그린 그림의 대칭으로 그리기 (0) | 2023.05.09 |
[C언어] 주사위 n번 던져서 1~6 각 수의 빈도와 확률 구하기 (0) | 2023.05.09 |
댓글