행(row)과 열(column) 형태인 datafram을 결합하기 위해서 concat() 함수를 사용합니다.
사용 방법은 매우 직관적이며 아래의 샘플코드를 한번 보시면 고등학생때 수업시간에 배운 집합을 생각하시면 매우 간단합니다.
1. 예제1
SampleDf1 = {'A': ['A1', 'A2', 'A3', 'A4'],
'B': ['B1', 'B2', 'B3', 'B4'],
'C': ['C1', 'C2', 'C3', 'C4'],
}
df1 = pd.DataFrame(SampleDf1)
print(df1)
SampleDf2 = {'A': ['A1', 'A2', 'A3', 'A4'],
'B': ['B1', 'B2', 'B3', 'B4'],
'C': ['C1', 'C2', 'C3', 'C4'],
}
df2 = pd.DataFrame(SampleDf2)
print(df2)
(실행결과)
A B C
0 A1 B1 C1
1 A2 B2 C2
2 A3 B3 C3
3 A4 B4 C4
A B C
0 A1 B1 C1
1 A2 B2 C2
2 A3 B3 C3
3 A4 B4 C4
unionDf = pd.concat([df1, df2])
(실행결과)
A B C
0 A1 B1 C1
1 A2 B2 C2
2 A3 B3 C3
3 A4 B4 C4
0 A1 B1 C1
1 A2 B2 C2
2 A3 B3 C3
3 A4 B4 C4
unionDf = pd.concat([df1, df2], ignore_index=True)
- 인덱스 새롭게 설정함
(실행결과)
A B C
0 A1 B1 C1
1 A2 B2 C2
2 A3 B3 C3
3 A4 B4 C4
4 A1 B1 C1
5 A2 B2 C2
6 A3 B3 C3
7 A4 B4 C4
unionDf = pd.concat([df1, df2],axis=1)
print(unionDf)
- 옆으로 데이타를 연결
(실행결과)
A B C A B C
0 A1 B1 C1 A1 B1 C1
1 A2 B2 C2 A2 B2 C2
2 A3 B3 C3 A3 B3 C3
3 A4 B4 C4 A4 B4 C4
unionDf = pd.concat([df1,df2],ignore_index=True).drop_duplicates(keep='first')
print(unionDf)
# 중복행 제거: drop_duplicates() 사용
(실행결과)
A B C
0 A1 B1 C1
1 A2 B2 C2
2 A3 B3 C3
3 A4 B4 C4
unionDf = pd.concat([df1,df2],ignore_index=True).drop_duplicates(keep='last')
print(unionDf)
(실행결과)
A B C
4 A1 B1 C1
5 A2 B2 C2
6 A3 B3 C3
7 A4 B4 C4
2. 예제2
SampleDf1 = {'A': ['A1', 'A2', 'A3', 'A4'],
'B': ['B1', 'B2', 'B3', 'B4'],
'C': ['C1', 'C2', 'C3', 'C4'],
}
df1 = pd.DataFrame(SampleDf1)
print(df1)
SampleDf2 = {'C': ['C1', 'C2', 'C3', 'C4'],
'D': ['D1', 'D2', 'D3', 'D4'],
'E': ['E1', 'E2', 'E3', 'E4'],
'F': ['F1', 'F2', 'F3', 'F4'],
}
df2 = pd.DataFrame(SampleDf2)
print(df2)
unionDf = pd.concat([df1, df2])
print(unionDf)
(실행결과)
A B C
0 A1 B1 C1
1 A2 B2 C2
2 A3 B3 C3
3 A4 B4 C4
C D E F
0 C1 D1 E1 F1
1 C2 D2 E2 F2
2 C3 D3 E3 F3
3 C4 D4 E4 F4
A B C D E F
0 A1 B1 C1 NaN NaN NaN
1 A2 B2 C2 NaN NaN NaN
2 A3 B3 C3 NaN NaN NaN
3 A4 B4 C4 NaN NaN NaN
0 NaN NaN C1 D1 E1 F1
1 NaN NaN C2 D2 E2 F2
2 NaN NaN C3 D3 E3 F3
3 NaN NaN C4 D4 E4 F4
unionDf = pd.concat([df1, df2], ignore_index=True)
print(unionDf)
(실행결과)
A B C D E F
0 A1 B1 C1 NaN NaN NaN
1 A2 B2 C2 NaN NaN NaN
2 A3 B3 C3 NaN NaN NaN
3 A4 B4 C4 NaN NaN NaN
4 NaN NaN C1 D1 E1 F1
5 NaN NaN C2 D2 E2 F2
6 NaN NaN C3 D3 E3 F3
7 NaN NaN C4 D4 E4 F4
unionDf = pd.concat([df1, df2],axis=1)
print(unionDf)
(실행결과)
A B C C D E F
0 A1 B1 C1 C1 D1 E1 F1
1 A2 B2 C2 C2 D2 E2 F2
2 A3 B3 C3 C3 D3 E3 F3
3 A4 B4 C4 C4 D4 E4 F4
3.정리
세부적인 설명보다는 샘플코드와 실행결과를 보면 이해가 쉽게 될것으로 생각되어 코드와 실행결과를 남겼습니다.
Dataframe 객체를 추출(?)이후, 정보 흐름 파악을 위해 컬럼 또는 로우간 누적 합/곱을 합니다.
이때 사용하는 함수로 cumsum / cumprod
가 있습니다.
위에서부터 아래로 한줄씩 덧셈/곱셈을 누적합니다.
1. 예제 데이타 프레임
df = pd.DataFrame({'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]}, index=['1', '2', '3'])
print(df)
[결과]
A B C
1 1 4 7
2 2 5 8
3 3 6 9
2. 누적합 예제
############################
# 행누적합
print()
print(df.cumsum(axis=1))
# 열누적합
print()
print(df.cumsum(axis=0))
[결과]
A B C
1 1 5 12
2 2 7 15
3 3 9 18
A B C
1 1 4 7
2 3 9 15
3 6 15 24
3. 누적곱 예제
############################
# 행누적곱
print()
print(df.cumprod(axis=1))
# 열누적곱
print()
print(df.cumprod(axis=0))
[결과]
A B C
1 1 4 28
2 2 10 80
3 3 18 162
A B C
1 1 4 7
2 2 20 56
3 6 120 504
4. 정리
개발 언어중에, 위의 기능은 python dataframe에만 있는것으로 알고 있다.
C/C++, Java등에서 해당 기능을 구현할려면 루핑을 돌려서 처리하였는데, 역시 Python은 데이타 분석을 위한 다양한 기능이 기본으로 제공되는 것 같다.
참여했던 프로젝트를 완료하고 시간이 지난후에 어떤 기능이 않된다고 연락을 받을때 마다 순간 순간 멍해진다.
오늘도 프로그램이 뜨지 않는다고 해서 연락을 받고 들여다 보니 쩝....
그래도 간략히 정리해두자.
해당 화면이 뜨는 원인은 분명하다. kiwoom에서 패포하는 ocx 파일의 버젼이 갱신, 즉 업데이트되었기 때문입니다.
그래서, 업데이트를 해주어야 하는데, 현재 프로젝트에서 직접 kiwoom에서 패포하는 ocx파일을 가져올수 없습니다.
그래서, kiwoom에서 관리 배포하는 KOA StudioSA를 로긴을 정상적으로 진행하는 방식으로 OCX를 업데이트 하면 해결됩니다.
참 쉽죠~~