2017-03-24 11 views
1

私は2つの入力に基づいて列に一致させようとしているCSV(下のものに似ています)を持っていますが、そのうちの1つは完全一致です。 「最も近い」と同じかそれ以下の単純なもの。Pandas: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のために - しかし、私は全くその機能に慣れていません。

最初のステップの1つは、タプルヘッダーto_datetime()の2番目の部分を変換することだと思いますが、その方法もわかりません。

...明らかに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

関連する問題