2009-07-22 4 views
1

В настоящее время я использую следующий код, чтобы получить столбец даты пересечения двух наборов финансовых данных. Массивы включают в себя дату, O, H, L, клКак вернуть элемент альтернативного столбца из команды intersect?

#find intersection of date strings 
def intersect(seq1, seq2): 
    res = []      # start empty 
    for x in seq1:    # scan seq1 
     if x in seq2:   # common item? 
      res.append(x) 


    return res 


x = intersect(seta[:,0], setb[:,0]) # mixed types 
print x 

Проблема заключается в том, что возвращает только столбец, для которого он нашел пересечение обоих, а именно столбец даты. Я бы хотел, чтобы он каким-то образом возвращал другой массив столбцов , включающий как значения cls для каждого набора ... т.е. , если дата является общей для обоих возвратов массива 2X1 из двух соответствующих столбцов cls . Есть идеи? Благодарю.

+0

Что вы подразумеваете под "cls values" и "cls columns"? –

+1

Is * set [:, 0] * выражение среза? Раньше я никогда не видел ничего подобного. – ThomasH

ответ

0

Хорошо, вот полное решение.

Получить python library to download stocks quotes

Получить некоторые цитаты

start_date, end_date = '20090309', '20090720' 
ibm_data = get_historical_prices('IBM', start_date, end_date) 
msft_data = get_historical_prices('MSFT', start_date, end_date) 

Преобразовать строки в дата-шпонкой словарей словарей

def quote_series(series): 
    columns = ['open', 'high', 'low', 'close', 'volume'] 
    return dict((item[0], dict(zip(columns, item[1:]))) for item in series[1:]) 

ibm = quote_series(ibm_data) 
msft = quote_series(msft_data) 

ли пересечение дат вещь

ibm_dates = set(ibm.keys()) 
msft_dates = set(msft.keys()) 

both = ibm_dates.intersection(msft_dates) 

for d in sorted(both): 
    print d, ibm[d], msft[d] 
+0

Эй, Хью, эта структура * item * некоторые финансовые данные, общие места, с которыми все знакомы ?! – ThomasH

+0

Вы моделировали каждый элемент данных как объект, но если бы я получил OP справа, каждый из них является массивом. Поэтому ваши конструкторы набора должны, вероятно, идти * set (item [0] ...) *, ваши dicts как * dict ((item [0], item [1:]) ...) * и ваш оператор печати * print d , da [d] [3], db [d] [3] *, так как OP интересуется только частью cl каждого элемента, правильно ?! – ThomasH

0

Как это сделать:

def intersect(seq1, seq2): 
    if seq1[0] == seq2[0]: # compare the date columns 
     return (seq1[4], seq2[4]) # return 2-tuple with the cls values 
Смежные вопросы