데이터 테이블을 파이썬리스트로 복사 한 후 테이블 2의 값을 독립 시리즈로 다시 분할해야했습니다. 전반적으로 이러한 값을 단일 표 Table2로 통합하는 단계를 건너 뛸 수 있습니다.
이 문제를 해결하는 핵심은 __getitem__
을 구현하는 간단한 클래스를 작성하고 단일 키 인수를 사용하여 해당 값을 반환하는 것입니다. 예를 들어, 일반적인 파이썬 dict의 경우 __getitem__
은 키와 정확하게 일치하는 dict 항목을 반환하고, 일치하는 항목이 없을 경우 KeyError를 반환합니다. 어떻게 사건을 처리하는 - 영업에 연습으로
closest = min(self.data, key=lambda x: abs(x[0]-keyts))
(왼쪽 : 귀하의 경우에, 난 그냥이 라인에 주어진 타임 스탬프에서 항목의 타임 스탬프의 최소 차이 항목을 반환하는 __getitem__
를 구현 여기서 키는 정확히 두 항목 사이에 위치합니다.) 조회 논리를 조정해야하는 경우 구현을 __getitem__
으로 변경하면 코드의 다른 모든 항목이 동일하게 유지됩니다.
# t1 and t2 are lists of tab-delimited strings copy-pasted
# from the OP's spreadsheet
TAB = '\t'
t1data = [t.split(TAB) for t in t1]
t2data = [t.split(TAB) for t in t2]
# split each parameter into individual time,value pairs
readings = {'A':[], 'B':[], 'C':[]}
for parm in "ABC":
for trec in t2data:
t,a,b,c = trec
t = int(t)
if a: readings['A'].append((t,int(a)))
if b: readings['B'].append((t,int(b)))
if c: readings['C'].append((t,int(c)))
# define class for retrieving value with "closest" key if
# there is not an exact match
class LookupClosest(object):
def __init__(self, pairs):
self.data = pairs
def __getitem__(self, key):
# implement logic here to find closest matching item in series
# TODO - what if key is exactly between two different values?
closest = min(self.data, key=lambda x: abs(x[0]-key))
return closest[1]
# convert each data series to LookupClosest
for key in "ABC":
readings[key] = LookupClosest(readings[key])
# extract and display data
for vals in t1data:
t = int(vals[0])
gps = vals[1]
a = readings['A'][t]
b = readings['B'][t]
c = readings['C'][t]
rec = t,gps,a,b,c
print rec
인쇄 : 여기
내 샘플 구현이다 (당신이 다음에 하나 개의 레코드에서 차이를 말할 수 있도록 나는 표 데이터를 수정) : 스택 오버플로
(1, 'x01', 1, 10, 44)
(10, 'x10', 2, 11, 47)
(21, 'x21', 4, 12, 45)
(30, 'x30', 3, 12, 44)
(41, 'x41', 4, 12, 47)
(52, 'x52', 2, 10, 48)
에 오신 것을 환영합니다 ! 당신이 원하는 것이 무엇인지, 당신이 가지고있는 것, 그리고 당신이 한 일로 당신이 거기에 가기를 기대하는 것은 명백하지 않습니다. 제발 ** 예제 입력 및 출력 ** 필요한 및 설명 * 당신이 이것을 달성하기 위해 노력하고있어. 또한 오프 사이트 리소스에 링크하지 마십시오. – Veedrac