이전 포스트에서
이번에는 그 결과를 DataFrame 형식으로 테이블을 만들어 보자.
우선 표의 한 열에 각행에 구간의 (시작값과 마지막 값]을 표시하고 다른 열에는 대상 데이터가 어느 구간에 속함을 대상데이터의 이름을 입력한다.
다음 함수는 DataFrame 형식으로 각 행에 (시작값과 마지막 값]을 표시한다.
def DisplayPreIntervalS(inter):
inter1=[]
for i in range(1, len(inter)):
inter2="("+str(inter[i-1])+','+str(inter[i])+']'
inter1.append(inter2)
inter1=np.array(inter1)
return(inter1)
위 함수에서 문자열의 '+' 연산자는 각 문자(열) 사이를 이어주는 역할을 적용한다.
In [1]: import numpy as np
In [2]: import pandas as pd
In [12]: re1=DisplayPreIntervalS(inter)
In [13]: re1
Out[13]: array(['(0.3,1.3]', '(1.3,2.4]', '(2.4,3.4]', '(3.4,4.4]', '(4.4,5.5]',
와 를 통해 참조 그룹을 설정하고 관찰치가 어느 그룹에 속하는지를 반환하는 함수를 작성하였다.이번에는 그 결과를 DataFrame 형식으로 테이블을 만들어 보자.
우선 표의 한 열에 각행에 구간의 (시작값과 마지막 값]을 표시하고 다른 열에는 대상 데이터가 어느 구간에 속함을 대상데이터의 이름을 입력한다.
다음 함수는 DataFrame 형식으로 각 행에 (시작값과 마지막 값]을 표시한다.
def DisplayPreIntervalS(inter):
inter1=[]
for i in range(1, len(inter)):
inter2="("+str(inter[i-1])+','+str(inter[i])+']'
inter1.append(inter2)
inter1=np.array(inter1)
return(inter1)
위 함수에서 문자열의 '+' 연산자는 각 문자(열) 사이를 이어주는 역할을 적용한다.
In [1]: import numpy as np
In [2]: import pandas as pd
In [3]: x=np.round(np.random.rand(3, 4)*10, 1)
In [4]: xdf=pd.DataFrame(x)
In [5]: refd=mkRefdS(xdf, 2)
In [6]: print(refd)
[ 3.5 1. 3.6 0.3 5.4 2.5 5.9 5.7 6.9 9.6 8.3 3.3]
In [7]: obs=pd.DataFrame(obs, index=["a","b","c","d"]) In [8]: obs
In [7]: obs=pd.DataFrame(obs, index=["a","b","c","d"]) In [8]: obs
Out[8]:
0 | |
---|---|
a | 4.2 |
b | 1.0 |
c | 8.8 |
d | 7.8 |
In [9]: inter, re=matchingObsS(obs.ix[:,0], refd)
In [10]: inter
Out[10]:array([ 0.3, 1.3, 2.4, 3.4, 4.4, 5.5, 6.5, 7.5, 8.6, 9.6])
In [11]: re
Out[11]:{'a': 3, 'b': 0, 'c': 8, 'd': 7}In [11]: re
In [12]: re1=DisplayPreIntervalS(inter)
In [13]: re1
Out[13]: array(['(0.3,1.3]', '(1.3,2.4]', '(2.4,3.4]', '(3.4,4.4]', '(4.4,5.5]',
'(5.5,6.5]', '(6.5,7.5]', '(7.5,8.6]', '(8.6,9.6]'],
dtype='<U9')
dtype='<U9')
위의 결과와 코드 11의 결과를 하나의 테이블로 나타내기 위해 다음 함수를 작성하였다.
이 함수의 인수 inter는 위의 re1이고 mch는 re이다.
def DisplayMatchPreObsS(inter, mch):
re=[0]*len(inter)
key=list(mch.keys())
val=list(mch.values())
m=0
for i in val:
if re[i] !=0:
re[i]=re[i]+','+key[m]
else:
re[i]=key[m]
m=m+1
re1=pd.DataFrame(np.c_[inter,re])
re1.columns=['Interval','obs']
return(re1)
위 함수의 기본 생각은 길이가 inter의 행의 수만큼인 각 값이 0인 리스트를 생성한다.
각 행의 번호(이름)과 위 결과 re의 values와 같은 인덱스를 나타낸다. 그러므로 모든 값이 0인 리스트의 인덱스와 values가 같은 위치에 그에 대응하는 keys값을 입력한다.
예를 들어 위의 결과 re에서 values=3에 대응하는 keys='a'이다. 그러므로
리스트[3]='a'를 입력한다.
또한 다른 별개의 re의 원소중 values가 같으면 그에 해당하는 문자가 결합되도록 if 조건문을 사용하였다.
In [14]: re2=DisplayMatchPreObsS(re1, re)
In [15]: re2
Out[15]:
Interval | obs | |
---|---|---|
0 | (0.3,1.3] | b |
1 | (1.3,2.4] | 0 |
2 | (2.4,3.4] | 0 |
3 | (3.4,4.4] | a |
4 | (4.4,5.5] | 0 |
5 | (5.5,6.5] | 0 |
6 | (6.5,7.5] | 0 |
7 | (7.5,8.6] | d |
8 | (8.6,9.6] | c |
댓글
댓글 쓰기