dataframe 객체를 시각화 하는 메서드
kind
: 플로팅할 유형입니다. 목록은 아래와 같습니다.
※ {line / bar / barh / hist / box / kde / density / area / pie / scatter / hexbin} x / y
: 각 축으로 설정할 값(컬럼명) 입니다.
ax
: 현재 figure의 axes 입니다. (fig와 axes의 개념은 아래 링크 참고)
※ 링크
subplot
: 각 열들을 별개의 서브차트로 플로팅할지의 여부입니다.
sharex / sharey
: subplot=True 인 경우 각축의 눈금을 공유할지 여부 입니다.
layout
: 튜플로 입력하는 subplot의 배열입니다.
figsize
: 출력할 fig의 크기 입니다.
use_index
: 인덱스를 x축의 눈금으로 사용할지 여부 입니다.
title
: fig의 제목 입니다.
grid
: 배경 격자의 형성 여부입니다.
legend
: subplot에서의 범례 배치 입니다.
style
: 선의 스타일 입니다. 자세한것은 링크 참고 바랍니다.
logx / logy / loglog
: 각 축에 대해 로그 스케일을 적용할지 여부 입니다. loglog=True
인 경우 두 축에 모두 적용합니다.
xticks / yticks
: 각 축의 눈금 값을 지정합니다.
xlim / ylim
: 각 축의 값의 경계를 지정합니다.
xlabel / ylabel
: 각 축의 라벨을 지정합니다.
rot
: 눈금값의 기울기 입니다. 눈금값이 많을경우 유용합니다.
fontsize
: 눈금값의 크기 입니다.
colormap / colorbar
: 각 값에 대해 matplolib 에서 지원하는 colormap을 적용할 수 있습니다.
table
: True면 데이터를 테이블로 출력하며 matplotlib의 기본 레이아웃에 맞게 전치됩니다.
yerr / xerr
: 특정 열의 값을 이용하여 오차범위 표현을 할 수 있습니다.
stacked
: bar plot이나 barh plot의 경우 막대 그래프를 누적 막대그래프로 표현할 수 있습니다.
sort_columns
: 열을 정렬하여 플랏할지 여부입니다.
secondary_y
: 보조축 레이블을 출력할지 여부 입니다.
mark_right
: 보조축 레이블을 출력할 경우 범례에 "(right)"으로 열 레이블을 표시할지 여부 입니다.
include_bool
: bool형식의 값을 플랏할지 여부입니다.
backend
: plotting.backend 옵션에 지정된 백엔드 대신 사용할 백엔드. 예를 들어, 'matplotlib'. 또는 전체 세션에 대해 plotting.backend를 지정하려면 pd.options.plotting.backend를 설정할 수 있습니다.
val = np.linspace(0,100,101)
sin = np.sin(np.pi/25*val)
tan = np.tan(np.pi/25*val)
df = pd.DataFrame(data={'val':val,'sin':sin,'tan':tan})
print(df)
>>
val sin tan
0 0.0 0.000000e+00 0.000000e+00
1 1.0 1.253332e-01 1.263294e-01
2 2.0 2.486899e-01 2.567564e-01
3 3.0 3.681246e-01 3.959280e-01
4 4.0 4.817537e-01 5.497547e-01
.. ... ... ...
96 96.0 -4.817537e-01 -5.497547e-01
97 97.0 -3.681246e-01 -3.959280e-01
98 98.0 -2.486899e-01 -2.567564e-01
99 99.0 -1.253332e-01 -1.263294e-01
100 100.0 1.286498e-15 1.286498e-15
df2
는 df
에서 sin, tan값만 추려낸 데이터 입니다.
sin과 tan은 삼각함수로, 각도에 따라 변하는 값을 나타냅니다.
sin은 수직 변의 길이를, tan은 수직 변과 수평 변의 비율을 나타냅니다
sin(사인):
tan(탄젠트):
수직 변과 수평 변의 비율을 나타냅니다.
sin 값을 cos 값으로 나눈 것과 같습니다.
df2 = df.loc[:,['sin','tan']]
print(df2)
>>
sin tan
0 0.000000e+00 0.000000e+00
1 1.253332e-01 1.263294e-01
2 2.486899e-01 2.567564e-01
3 3.681246e-01 3.959280e-01
4 4.817537e-01 5.497547e-01
.. ... ...
96 -4.817537e-01 -5.497547e-01
97 -3.681246e-01 -3.959280e-01
98 -2.486899e-01 -2.567564e-01
99 -1.253332e-01 -1.263294e-01
100 1.286498e-15 1.286498e-15
[101 rows x 2 columns]
기본적인 사용법
기본 적인 사용법은 df.plot() 형태 입니다. line 형태로 모든 열을 plot하게 됩니다.
df2.plot()
plt.show()
sin그래프, tan그래프가 출력된 것을 확인할 수 있습니다.
kind, x, y 인수의 사용
kind
인수를 통해 원하는 형태의 그래프를 출력 할 수 있으며, x와 y
로 해당 그래프의 x와 y를 지정할 수 있습니다.
※ {line / bar / barh / hist / box / kde / density / area / pie / scatter / hexbin}
df.plot(kind='line', x='val', y='sin')
plt.show()
x축의 값은 0~100, y축의 값은 sin값으로 line
을 plot한 것을 확인할 수 있습니다.
ax 인수의 사용
ax
인수를 통해 현재 axes값을 별도의 값으로 지정하여 plot에 사용할 수 있습니다.
fig, ax=plt.subplots(2) # 두개의 서브플롯에 ax를 배치하도록 fig를 설정
df.plot(kind='line', x='val', y='sin', ax=ax[0]) # sin그래프를 ax[0]으로 지정
df.plot(kind='line', x='val', y='tan', ax=ax[1]) # tan 그래프를 ax[1]으로 지정
plt.show()
각각의 ax로 구분한 Axes를 2칸짜리 subplot에 배열하여 plot한것을 확인 할 수 있습니다.
subplots 인수의 사용
subplots
인수를 사용할 경우 각각의 열을 별도의 axes로 하여 subplot를 생성합니다.
※ 위 ax인수의 예시처럼 fig를 별도의 subplot 개체로 지정할 필요가 없습니다.
df2.plot(subplots=True)
plt.show()
각각의 열이 별도의 subplot에 할당된 것을 확인할 수 있습니다.
sharex / sharey 인수의 사용
subplot을 이용할 경우 두 Axes의 x축이나 y축값을 맞출 수 있습니다.
이때 공유된 축의 경우 한쪽은 보이지 않게 됩니다.
sharex의 기본값은 True로 x축은 맞추게 되고, sharey의 기본값은 False로 y축은 별도로 출력하는것이 기본입니다.
df2.plot(subplots=True, sharex=False, sharey=True) # x축값을 별도로 출력하고 y축값을 공유하도록 변경
plt.show()
x축값이 각각 그래프에 별도로 출력되는것을 확인 할 수 있습니다.
※subplot이 세로로 배열되어있기 때문에, shary=True인데 각각 출력이 됩니다. 가로로 배열되어있는상태라면 출력되지 않습니다.
layout인수의 사용
layout
인수를 이용하여 subplot의 배열을 설정할 수 있습니다. 튜플 형태로 값을 입력합니다.
df2.plot(subplots=True, layout=(2,2))
plt.show()
fig가 2x2짜리 subplot으로 설정된 것을 확인할 수 있습니다.
figsize인수의 사용
figsize
인수를 이용해서 figure의 크기를 지정할 수 있습니다. 단위는 inch입니다.
df2.plot(figsize=(10,4))
plt.show()
fig의 크기가 변경된 것을 확인할 수 있습니다.
title / grid 인수의 사용
title
인수는 figure의 제목을 설정하고, grid
인수는 격자 출력 여부를 설정할 수 있습니다.
df2.plot(title="Pandas plot method", grid=True)
plt.show()
제목이 "Pandas plot method"로 설정되고, 격자가 설정된 것을 확인할 수 있습니다.
linestyle 인수의 사용
linestyle
인수를 지정하여 출력되는 그래프의 선 스타일을 지정할 수 있습니다.
선의 종류에 대해서는 matplotlib 홈페이지 참고 바랍니다.
df2.plot(linestyle='dashed')
plt.show()
선의 종류가 "- -" 형태인 'dashed'로 바뀐것을 확인 할 수 있습니다.
logx / logy / loglog인수의 사용
logs / logy / loglog
인수를 이용해 각 축의 표시형식을 log스케일로 변경할 수 있습니다.
loglog
인수는 모든 축의 값을 로그스케일로 변경합니다.
df2.plot(logx=True,logy=True) # df2.plot(loglog=True)
plt.show()
각 축의 표기형태가 로그 스케일로 변경된 것을 확인할 수 있습니다.
xticks / yticks 인수의 사용
xticks / yticks
인수에 리스트 형태의 값을 입력하여 특정 눈금의 값을 출력할 수 있습니다.
df.plot(kind='line', x='val',y='sin', xticks=[0,50,100],yticks=[0,0.5,1])
plt.show()
x축의 눈금이 0, 50, 100 만 y축의 눈금이 0, 0.5, 1 만 표시된 것을 확인할 수 있습니다.
xlim / ylim 인수의 사용
xlim / ylim
인수를 사용해 그래프의 출력 범위를 지정할 수 있습니다.
df.plot(kind='line', x='val',y='sin', xlim=[30,80],ylim=[0.25,0.75])
plt.show()
그래프가 x축으로는 30~80의 범위가, y 축으로는 0.25~0.75의 범위가 출력 된 것을 확인할 수 있습니다.
xlabel / ylabel 인수의 사용
xlabel / ylabel
인수를 사용해 각 축의 라벨을 출력할 수 있습니다.
df2.plot(xlabel='Width',ylabel='Height')
plt.show()
각 축의 이름이 출력 된 것을 확인할 수 있습니다.
rot / fontsize 인수의 사용
rot
인수를 이용해 눈금값의 기울기를 지정할 수 있고, fontsize
인수를 통해 눈금값의 크기를 지정할 수 있습니다.
df2.plot(rot=45,fontsize=20)
plt.show()
그래프 눈금값의 기울기가 45도로, 눈금값의 크기가 20으로 변경된 것을 확인할 수 있습니다.
colormap / colorbar 인수의 사용
colormap
은 출력되는 그래프의 값을 특정 색 범위로 표현하는 matplotlib의 기능입니다. colorbar
는 색에 해당하는 값의 범위를 막대 형태로 출력하는 기능입니다.
colorbar
의 기본값은 True이기 때문에, False로 지정해주어야 출력이 안됩니다.
colorbar
를 적용하기 위해서는, 각 값에 대해서 색을 지정해 주어야합니다. c
인수에 색의 값을 지정하는 열을 입력하여 가능합니다.
colormap
의 종류에 대해서는 matplolib 에서 지원하는 colormap 링크을 참고 바랍니다.
data = {'x_value':[4,7,3,1,2],'y_value':[1,2,3,4,5],'color_bar':[0,1,2,3,4]}#x축에 표시될 값들,y축에 표시될 값들,각 점의 색을 결정할 값 (컬러바)
df3 = pd.DataFrame(data)
df3.plot(kind='scatter',x='x_value',y='y_value',c='color_bar', colormap='cool',colorbar=True) # c인수로 color_bar 열을 지정.
# 산점도 그래프 (scatter plot)로 그림, x축은 'x_value' 열 사용, 축은 'y_value' 열 사용,각 점의 색을 'color_bar' 열 값에 따라 다르게 지정, 색상 맵(colormap) 지정 ('cool'은 보라-청록 계열), 색상 기준을 옆에 colorbar로 시각적으로 표시
plt.show()
c='color_bar'
를 통해 색범위를 0~4로 정해주었고, 각 y값에 대해서 색값을 지정해주었습니다.
그에 맞게 colormap
과 colorbar
가 적용된 것을 확인할 수 있습니다.
position 인수의 사용
position
인수는 막대그래프 'bar / barh'에대해서 막대의 위치가 눈금의 위치 {좌측(0), 중(0.5), 우측(1)}를 지정할 수 있습니다.
data = {'x_value':[4,7,3,1,2],'y_value':[1,2,3,4,5],'color_bar':[0,1,2,3,4]}
df3 = pd.DataFrame(data)
fig, ax=plt.subplots(3) # 3칸짜리 subplot을 갖는 fig 개체 설정
df3.plot(kind='bar',x='x_value',y='y_value',position=0,ax=ax[0])
df3.plot(kind='bar',x='x_value',y='y_value',position=0.5,ax=ax[1])
df3.plot(kind='bar',x='x_value',y='y_value',position=1,ax=ax[2])
plt.show()
각각 그래프에서 눈금의 위치와 막대 그래프의 위치를 비교해보면 position
인수가 어떻게 적용되는지 확인할 수 있습니다.
xerr / yerr인수의 사용
xerr / yerr
인수는 특정 축을 기존그래프의 오차범위로 설정하는 인수 입니다.
data = {'x_value':[1,2,3,4,5],'y_value':[2,5,3,7,1],'err':[0.1,0.3,0.6,1.0,0.1]}
df4 = pd.DataFrame(data)
fig, ax=plt.subplots(2)
df4.plot(kind='bar',x='x_value',y='y_value',yerr='err',ax=ax[0])
df4.plot(kind='barh',x='x_value',y='y_value',xerr='err',ax=ax[1])
plt.show()
기존 x_value / y_value 막대그래프에 대해서 작은 선 형태로 err 열이 오차범위로써 덧 씌워진 것을 확인할 수 있습니다.
stacked 인수의 사용
막대그래프의 경우 값이 여러개라면 stacked
인수를 통해 누적 막대그래프의 형태로 변환이 가능합니다.
data = {'x_value':[1,2,3,4,5],'y_value':[2,5,3,7,1],'err':[0.1,0.3,0.6,1.0,0.1]}
df4 = pd.DataFrame(data)
df4.plot(kind='bar',x='x_value',y=['y_value','err'],stacked=True)
plt.show()
y
의 값을 리스트 형태로 두 컬럼을 입력하여 두 막대그래프를 출력하도록 한 다음 stacked=True
로 하여 누적 막대그래프가 된 것을 확인할 수 있습니다.
secondary_y 인수의 사용
두 그래프를 출력 할 경우 한 Axes를 다른 Axes에 종속시킴으로서 종속된 Axes를 secondary_y
인수를 이용해 보조 축으로 표현할 수 있습니다.
data = {'x_value':[1,2,3,4,5],'y_value':[2,5,3,7,1],'err':[0.1,0.3,0.6,1.0,0.1]}
df4 = pd.DataFrame(data)
ax1 = df4.plot(x='x_value',y='y_value',color='Red',) # y_value를 ax1로
ax2 = df4.plot(x='x_value',y='err',ax=ax1,secondary_y=True) # err을 ax2로하여 ax1에 종속 및 보조축 설정
ax1.set_ylabel('y_value') # 라벨 설정
ax2.set_ylabel('err')
ax1를 생성하고 ax2를 ax1에 종속시키면서 secondary_y=True
로 하여 우측에 보조축이 생성된 것을 확인할 수 있습니다.
val = np.linspace(0,100,101)
sin = np.sin(np.pi/25*val)+1
cos = np.cos(np.pi/25*val)+1
df = pd.DataFrame(data={'val':val,'sin+1':sin,'cos+1':cos})
print(df)
>>
val sin+1 cos+1
0 0.0 1.000000 2.000000
1 1.0 1.125333 1.992115
2 2.0 1.248690 1.968583
3 3.0 1.368125 1.929776
4 4.0 1.481754 1.876307
.. ... ... ...
96 96.0 0.518246 1.876307
97 97.0 0.631875 1.929776
98 98.0 0.751310 1.968583
99 99.0 0.874667 1.992115
100 100.0 1.000000 2.000000
기본적인 사용법
plot.[area / bar / barh / line]
메서드는 반드시 x축과 y축(값)을 지정해주어야 합니다.
area메서드의 사용
plot.area
메서드는 데이터를 면적 그래프의 형태로 반환합니다. 기본적으로 stacked=True
이므로, 면적이 누적되는 형태로 출력됩니다.
df.plot.area(x='val',y=['sin+1','cos+1'],stacked=True) #stacked=True는 기본값
#sin과 cos 사인은 -1~+1까지 나타내기 때문에 1부터 시작하기 위헤서 1을 더한거다
plt.show()
stacked=False
인 경우 면적이 겹치는것을 시각화 하여 보여줍니다.
df.plot.area(x='val',y=['sin+1','cos+1'],stacked=False)
plt.show()
bar / barh 메서드의 사용
plot.bar / plot.barh
는 각각 세로 막대그래프, 가로 막대 그래프를 반환합니다.
df.plot.bar(x='val',y=['sin+1','cos+1'])#plot.bar 세로 막대그래프
plt.show()
df.plot.barh(x='val',y=['sin+1','cos+1'])#가로 막대그래프
plt.show()
line 메서드의 사용
plot.line
메서드는 선형 그래프를 반환합니다.
df.plot.line(x='val',y=['sin+1','cos+1'])#선형 그래프
plt.show()
x / y
: 각 축으로 설정할 값(컬럼명) 입니다.
c
: 각 값에 대한 colorbar의 값을 지정할 수 있습니다.
kwargs
: 그 외에 matplotlib 중 plot에서 지원하는 인수의 사용이 가능합니다.
먼저 기본적인 사용법 예시를위하여 데이터를 만들어 보겠습니다.
df
는 크기 10000짜리 가우시안 표준 정규분포 x
와 y
, 그리고 0~10까지의 난수를 갖는 1000개짜리 c
열 의 데이터입니다.
df = pd.DataFrame({'x':np.random.randn(10000),
'y':np.random.randn(10000),
'c':np.random.randint(0,10,size=10000)})
>>
x y c
0 0.987301 0.239920 4
1 -0.466582 0.432507 4
2 0.462679 0.869407 7
3 0.547113 -1.123641 8
4 0.046728 -1.220947 6
... ... ... ..
9995 0.241341 -0.598799 0
9996 -1.694559 1.428881 5
9997 0.929081 -1.504374 9
9998 1.561134 1.445425 5
9999 2.113502 0.611024 7
[10000 rows x 3 columns]
기본적인 사용법
plot.[hexbin / scatter]]
메서드는 반드시 x축과 y축(값)을 지정해주어야 합니다. (colormap은 자동으로 지정되며, c는 선택)
hexbin메서드의 사용
hexbin
메서드는 육각형의 그리드형태로 값을 반환하는 그래프 입니다. gridsize 인수
는 x축 기준 그리드 한칸의 크기를 의미합니다.
colormap
인수는 자동 지정되나, 원하는 colormap으로 지정이 가능합니다.
df.plot.hexbin(x='x',y='y',gridsize=20,colormap='viridis')
plt.show()
C 인수의 사용
C
인수를 통해 colormap 기준으로 각 값이 colorbar에서 어떤 값을 취할지 지정할 수 있습니다.
df.plot.hexbin(x='x',y='y',gridsize=20,colormap='jet',C='c')
plt.show()
reduce_C_function 인수의 사용
reduce_C_function
인수는 colorbar의 값에 대해서 그래프의 bin(한칸의 가로사이즈)에 속하는 값들이 하나의 대표값으로 통일하게 해주는 np 메서드를 지정하는 인수입니다.
df.plot.hexbin(x='x',y='y',gridsize=20,colormap='cool',C='c',reduce_C_function=np.max)
plt.show()
colorbar에 대해서 한 bin의 값들이 해당값의 max값으로 통일 되어 반환되는것을 확인 할 수 있습니다.
scatter메서드의 사용
scatter
는 점산도 그래프를 반환하는 메서드입니다.
s
인수는 점의 크기를 스칼라값으로 지정 가능하며, c
인수를 통해 각 값이 colorbar에서 어떤 값을 취할지 지정 가능합니다.
df.plot.scatter(x='x',y='y',s=3,c='c',colormap='viridis')
plt.show()
data = np.random.randn(100,2)
df = pd.DataFrame(data, columns = ['x','y'])
print(df)
>>
x y
0 1.476916 -1.549051
1 0.156672 1.601624
2 0.493568 0.096696
3 -0.550939 0.200391
4 0.885276 0.613648
.. ... ...
95 -0.048403 2.432448
96 0.020946 0.900305
97 0.128520 0.514659
98 0.369856 1.519807
99 0.928380 0.105314
[100 rows x 2 columns]
기본적인 사용법
plot.[box / hist / pie]]
메서드는 각 열의 데이터를 가져오기 때문에 x축, y축등을 지정해 줄 필요가 없습니다.
box메서드의 사용
box
메서드의 경우 boxplot을 출력합니다.
df.plot.box
메서드는 df.boxplot
메서드와 동일한 기능을 수행합니다.
data = np.random.randn(100,2)
df = pd.DataFrame(data, columns = ['x','y'])
df.plot.box()
plt.show()
hist 메서드의 사용
hist
메서드의 경우 histogram을 출력합니다. bins
인수를통해 막대 하나의 크기를 정할 수 있으며, alpha를 통해 투명도를 설정할 수 있습니다.
df.plot.hist
메서드는 df.hist
메서드와 동일한 기능을 수행합니다.
data = np.random.randn(100,2)
df = pd.DataFrame(data, columns = ['x','y'])
df.plot.hist(bins=20,alpha=0.5,color=['green','blue']) # bins로 막대 크기20, alpha로 투명도 0.5, 색은 초록-파랑 설정
plt.show()
pie 메서드의 사용
pie
메서드는 원형 그래프를 출력하는 메서드 입니다. 열의 갯수만큼의 원형그래프가 생성되므로 서브플롯을 설정해주어야합니다.
data = {'x':[3,7,9],'y':[2,6,3]}
idx = ['A','B','C']
df = pd.DataFrame(data=data, index= idx)
df.plot.pie(subplots=True)
plt.show()
bw_method
: 대역폭을 지정합니다. 대역폭이 작을수록 더 자세한 smoothing이 가능하고, 대역폭이 크면 러프한 smoothing이 수행됩니다.
ind
: 예상 PDF에 대한 평가 포인트입니다. 기본값은 1000개의 타점이며, numpy array나 리스트형태로 입력 할 경우 해당 포인트로 계산이 수행됩니다.
kwargs
: matplotlib 중 plot에서 지원하는 인수의 사용이 가능합니다.
먼저 기본적인 사용법 예시를위하여 데이터를 만들어 보겠습니다.
df
는 크기 1000짜리 가우시안 표준 정규분포 value
열의 데이터입니다.
data = np.random.randn(1000,1)
df = pd.DataFrame(data,columns=['value'])
print(df)
>>
value
0 -0.307367
1 0.310514
2 1.135779
3 -0.584566
4 0.859781
.. ...
995 0.449085
996 -0.513770
997 -0.782740
998 1.250284
999 0.566071
[1000 rows x 1 columns]
기본적인 사용법
커널밀도추정(KDE)는 간단히 말하면 데이터의 histogram을 smoothing하는 것이라고 볼 수 있습니다.(실제로는 더 복잡한 의미를 가집니다.)
50bin 짜리 histogram과 함께 kde
메서드를 수행해서 비교해보겠습니다.
data = np.random.randn(1000,1)
df = pd.DataFrame(data,columns=['value'])
ax = df.plot.hist(bins=50)
df.plot.kde(ax=ax,secondary_y=True)
plt.show()
bw_method 인수의 사용
bw_method
인수를이용해 대역폭(bandwidth)를 설정할 수 있습니다. bw_method
가 작을수록 더욱 세부적인 계산이 수행됩니다.
data = np.random.randn(1000,1)
df = pd.DataFrame(data,columns=['value'])
ax = df.plot.hist(bins=50)
df.plot.kde(ax=ax,secondary_y=True,bw_method=0.1)
df.plot.kde(ax=ax,secondary_y=True,bw_method=3)
plt.show()
주황색 line의 0.1짜리 대역폭과, 녹색 line의 3짜리 대역폭의 차이점을 볼 수 있습니다.
ind 인수의 사용
ind
인수를 통해 계산이 수행되는 지점을 지정할 수 있습니다.
data = np.random.randn(1000,1)
df = pd.DataFrame(data,columns=['value'])
ax = df.plot.hist(bins=50)
df.plot.kde(ax=ax,secondary_y=True)
df.plot.kde(ax=ax,secondary_y=True,ind=[-6,-4,-2,0,2,4,6],color='red')
plt.show()
붉은색 line이 특정 지점을 기준으로 계산 된 것을 확인 할 수 있습니다.
위 데이터프레임에서 테마별 PER, PBR의 최대, 최소값을 계산하세요.
data = [
["2차전지(생산)", "SK이노베이션", 10.19, 1.29],
["해운", "팬오션", 21.23, 0.95],
["시스템반도체", "티엘아이", 35.97, 1.12],
["해운", "HMM", 21.52, 3.20],
["시스템반도체", "아이에이", 37.32, 3.55],
["2차전지(생산)", "LG화학", 83.06, 3.75]
]
columns = ["테마", "종목명", "PER", "PBR"]
df = pd.DataFrame(data=data, columns=columns)
print(df)
테마 종목명 PER PBR
0 2차전지(생산) SK이노베이션 10.19 1.29
1 해운 팬오션 21.23 0.95
2 시스템반도체 티엘아이 35.97 1.12
3 해운 HMM 21.52 3.20
4 시스템반도체 아이에이 37.32 3.55
5 2차전지(생산) LG화학 83.06 3.75
#
#정답
df.groupby(by="테마").max()
df.groupby(by="테마").min()
>>
종목명 PER PBR
테마
2차전지(생산) LG화학 10.19 1.29
시스템반도체 아이에이 35.97 1.12
해운 HMM 21.23 0.95
#2번정답
df.groupby(by="테마").size()
df.groupby(by="테마").size()
>>
0
테마
2차전지(생산) 2
시스템반도체 2
해운 2
dtype: int64
#3번정답
df.groupby(by="테마").get_group("2차전지(생산)")
>>
테마 종목명 PER PBR
0 2차전지(생산) SK이노베이션 10.19 1.29
5 2차전지(생산) LG화학 83.06 3.75
#4번정답
찐 df.groupby("테마")[["PER"]].mean()
df.groupby(by="테마").mean("PER","PBR")
>>
PER PBR
테마
2차전지(생산) 46.625 2.520
시스템반도체 36.645 2.335
해운 21.375 2.075
#5번정답
df.groupby("테마")[["PER", "PBR"]].mean()
>>
PER PBR
테마
2차전지(생산) 46.625 2.520
시스템반도체 36.645 2.335
해운 21.375 2.075