2017-10-18 4 views
1

Par exemple, donné une trame de données df1:Comment effectuer des opérations sur une zone de données Pandas avec des Datetime en double?

Date   Computers Syms 
2011-01-10 400.  1 
2011-01-10 500.  1 
2012-04-12 450.  1 

et les variables log = some_df.loc[some_df.index, 'Cat'] et price = df2.loc[:, log], Je veux calculer

df1.loc[df1.index, syms] = price * log 

syms est juste la série. Lorsque je tente la commande ci-dessus, je reçois l'erreur:

ValueError: cannot reindex from a duplicate axis 

Comment dois-je régler les valeurs de la colonne de syms à cette expression étant donné que certains indices sont équivalents?

Un résultat attendu serait

Date   syms1   syms2 
2011-01-10 price * log  price * log 
2011-01-10 price * log  price * log 
2012-04-12 price * log  price * log 
+0

On ne sait pas à moi ... – Wen

+0

Sur quoi avez-vous besoin d'éclaircissements? – dirtysocks45

+0

Expected out et votre df1 ressemble à un pd.Series – Wen

Répondre

2

Lorsque vous utilisez loc, vous pouvez utiliser : pour indiquer tous cet axe, soit l'index ou colonnes.

df_trades.loc[:, 'syms'] = houses * cars 

df_trades 

     Date Computers syms 
0 2011-01-10  400 80000 
1 2011-01-10  500 80000 
2 2012-04-12  450 80000 

Vous pouvez également utiliser pd.DataFrame.assign pour produire une copie avec la nouvelle colonne

df_trades.assign(syms=houses * cars) 

     Date Computers syms 
0 2011-01-10  400 80000 
1 2011-01-10  500 80000 
2 2012-04-12  450 80000 

Si syms est une série de noms de colonnes

syms = pd.Series(['syms1', 'syms2']) 

df_trades.assign(**dict((s, houses * cars) for s in syms)) 

     Date Computers syms1 syms2 
0 2011-01-10  400 80000 80000 
1 2011-01-10  500 80000 80000 
2 2012-04-12  450 80000 80000 
+0

toute la nuit seulement vous et moi :-) LOL – Wen

+2

We'll voir ... même si, nous avons ça! – piRSquared

+0

Lol mes méchants. Je suis un peu fou maintenant – dirtysocks45

1
df ['Syms'] = 400 * 200 
df 
Out[189]: 
     Date Computers syms 
0 2011-01-10  400 80000 
1 2011-01-10  500 80000 
2 2012-04-12  450 80000 

Modifier

syms=['sys1','sys2'] 
d = dict.fromkeys(syms, 200*400) 
df.assign(**d) 
+0

J'ai complètement changé ma question – dirtysocks45

+0

@ dirtysocks45 devrait-il être une nouvelle question? – Wen

+0

Je ne veux pas obstruer le flux. – dirtysocks45