2009-07-22 5 views
1

Je suis actuellement en utilisant le code suivant pour obtenir la colonne date de l'intersection de deux ensembles de données financières. Les tableaux comprennent la date, o, h, l, clComment renvoyer un élément de colonne alternatif de la commande 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 

Le problème est-il ne retourne que la colonne pour laquelle il a trouvé la intersection des deux, à savoir la colonne de date. Je voudrais en quelque sorte retourner un tableau de colonnes différent en incluant à la fois les valeurs cls de chaque ensemble ... soit si la date est commune à la fois retourner un tableau 2X1 des deux colonnes correspondantes . Des idées? Merci.

+0

Qu'entendez-vous par "valeurs cls" et "colonnes cls"? –

+1

Est-ce que * set [:, 0] * une expression de tranche? Je n'ai jamais vu quelque chose comme ça avant. – ThomasH

Répondre

0

Bon, voici une solution complète.

Obtenez un python library to download stocks quotes

Obtenez des devis

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) 

rangées Convertir en date clé dictionnaires de dictionnaires

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) 

Est-ce que l'intersection des dates chose

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

Hey Hugh, cette structure de * item * est-elle un lieu commun de données financières que tout le monde connaît? – ThomasH

+0

Vous avez modélisé chaque élément de données en tant qu'objet, mais si j'ai obtenu l'OP correct, chacun est un tableau. Donc, vos constructeurs d'ensembles devraient probablement aller à * set (item [0] ...) *, vos dicts aiment * dict ((item [0], item [1:]) ...) * et ta commande print * print d , da [d] [3], db [d] [3] *, puisque OP n'est intéressé que par la partie cl de chaque item, non ?! – ThomasH

0

Comment ça:

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