J'utilise Python 3.5 sous Windows et j'écris du code pour étudier l'économétrie financière.Créer une nouvelle colonne basée sur une autre colonne pour une image Panda multi-index
J'ai une base de données panda multi-index où l'index de niveau = 0 est une série de dates de fin de mois et l'index de niveau = 1 est un simple ID entier. Je veux créer une nouvelle colonne de valeurs ('new_var') où pour chaque date de fin de mois, j'attends 1 mois et j'obtiens les valeurs d'une autre colonne ('some_var') et bien sûr les ID du mois courant pour aligner avec les ID pour le mois avant. Voici un cas de test simple.
import pandas as pd
import numpy as np
# Create some time series data
id = np.arange(0,5)
date = [pd.datetime(2017,1,31)+pd.offsets.MonthEnd(i) for i in [0,1]]
my_data = []
for d in date:
for i in id:
my_data.append((d, i, np.random.random()))
df = pd.DataFrame(my_data, columns=['date', 'id', 'some_var'])
df['new_var'] = np.nan
df.set_index(['date', 'id'], inplace=True)
# Drop an observation to reflect my true data
df.drop(('2017-02-28',3), level=None, inplace=True)
df
# The desired output....
list1 = df.loc['2017-01-31'].index.labels[1].tolist()
list2 = df.loc['2017-02-28'].index.labels[1].tolist()
common = list(set(list1) & set(list2))
for i in common:
df.loc[('2017-01-31', i)]['new_var'] = df.loc[('2017-02-28', i)]['some_var']
df
Je pense qu'il y a un meilleur moyen d'obtenir la sortie désirée. Peut-être que je devrais simplement embrasser la boucle "pour"? Peut-être qu'une meilleure solution est de réinitialiser l'index?
Merci,
F
qui a fonctionné et semble être très efficace. Je vous remercie. – Fred