2017-10-18 4 views
0

I ont deux trames de données:valeurs append pandas géants où la valeur est égale à une autre valeur

dfi = pd.read_csv('C:/Users/Mauricio/Desktop/inflation.csv') 
dfm = pd.read_csv('C:/Users/Mauricio/Desktop/maturity.csv') 
# equals the following 
    observation_date CPIAUCSL 
0  1947-01-01  21.48 
1  1947-02-01  21.62 
2  1947-03-01  22.00 
3  1947-04-01  22.00 
4  1947-05-01  21.95 
    observation_date DGS10 
0  1962-01-02 4.06 
1  1962-01-03 4.03 
2  1962-01-04 3.99 
3  1962-01-05 4.02 
4  1962-01-08 4.03 

J'ai créé une copie comme df procédant comme suit:

df = dfi.copy(deep=True) 

qui retourne une copie exacte de dfi, dfi dates passent mois et DFM dates passent jour, je veux créer une nouvelle colonne dans df que chaque fois une date dans dfi == une date dans dfm, pour y ajouter la valeur DGS10.

J'ai ce jusqu'à présent:

for date in df.observation_date: 
    for date2 in dfm.observation_date: 
     if date==date2: 
      df['mat_rate'] = dfm['DGS10'] 

# this is what I get but dates do not match values 
    observation_date CPIAUCSL mat_rate 
0  1947-01-01  21.48  4.06 
1  1947-02-01  21.62  4.03 
2  1947-03-01  22.00  3.99 
3  1947-04-01  22.00  4.02 
4  1947-05-01  21.95  4.03 

Il fonctionne, mais ne recevront pas les dates où la date == date2 ce que je peux le faire, il ajoute les valeurs où la date est égale à date2 seulement? Merci!

+0

Euh, ces dates ne sont pas égaux si, Comment combinez-vous toujours les lignes? –

+0

@ cᴏʟᴅsᴘᴇᴇᴅ ce ne sont que les 4 premières dates, l'ensemble des données est 14000 entrées, c'est pourquoi il trouve cette date == date2 à un moment donné dans la boucle – MAUCA

Répondre

1

Si les formats de date sont incompatibles, les convertir d'abord:

dfi.observation_date = pd.to_datetime(dfi.observation_date, format='%Y-%m-%d') 
dfm.observation_date = pd.to_datetime(dfm.observation_date, format='%Y-%m-%d') 

Maintenant, obtenir votre résultat devrait être facile avec un merge:

df = dfi.merge(dfm, on='observation_date') 
+0

Awesome! cela a fait le travail, vous avez une petite erreur: dfm.observation_date = pd.to_datetime (dfm.observation_date, format = '% Y-% d-% m') devrait être: dfm.observation_date = pd.to_datetime (dfm.observation_date , format = '% Y-% m-% d') au cas où quelqu'un d'autre voudrait l'utiliser aussi comme solution – MAUCA

+0

@MauricioCastaneda Je pensais que les formats de date de 'dfi' et' dfm' étaient différents? Vous avez dit 'dfi' commence par day, et' dfm' commence par le mois. Ou sont-ils les mêmes? –

+0

@COLDSPEED ils sont identiques, ce que je veux dire, c'est que dfi est enregistré mensuellement, et dfm est enregistré tous les jours, mais les deux les mêmes% Y-% m-% d format – MAUCA