2017-03-24 2 views
1

저는 두 개의 입력을 기반으로 한 열과 일치시키려는 CSV (아래의 것과 비슷합니다)가 있는데, 그 중 하나는 정확한 일치이고 다른 하나는 보다 작거나 같은 "가장 가까운"것.팬더 : to_datetime 튜플 헤더 - 가장 가까운 일치

DataFrame 코드 :

import pandas as pd 
from StringIO import StringIO 

# pseudo CSV data 
x = StringIO(''' 
main,A,A,A,B,B,B 
date,1/1/2016,3/1/2016,5/1/2016,1/1/2016,3/1/2016,5/1/2016 
one,11,22,33,44,55,66 
two,77,88,99,111,222,333 
''') 

df = pd.read_csv(x, header = [0,1], tupleize_cols = True) 

입력이 될 것입니다 뭔가 같은 :

my_main = 'B' 
my_date = pd.to_datetime('2/1/2016') 

내가 수익을 원하는가되게합니다 :

(B, 1/1/2016) 
0    44 
1   111 

이도 작업 할 수있다 MultiIndex에 대한 -하지만 그 기능에 완전히 익숙하지 않습니다.

첫 번째 단계 중 하나는 튜플 헤더 to_datetime()의 두 번째 부분을 변환하는 것이지만 그 중 하나를 수행하는 방법을 알 수는 없다고 생각합니다.

... 분명히 df[('B','1/1/2016')] 일 이겠지만, 부분이 문지름입니다.

답변

2

목록 열람을 사용하여 올바른 열을 찾습니다.

date = pd.to_datetime('2/1/2016') 
df[[c for c in df if c[0] == 'B' and pd.to_datetime(c[1]) <= date]] 

    (B, 1/1/2016) 
0    44 
1   111 
+0

그래, 거기에 튜플 헤더가 붙어 있습니다. 이것은 환상적인 방법입니다, 감사합니다! – pshep123