2016-04-10 16 views
1

Ich habe einen großen Datensatz in Pandas mit einem Datetime-Index. Der Datenrahmen beginnt am 2010-04-09 und endet die aktuelle Zeit. Als ich dieses Dataset erstellte, hatte ich für ein paar Spalten, die nur Daten hatten, die ab 2011-06-01 begannen. Die Werte über denen waren NaN-Werte. Jetzt habe ich die Daten für einige dieser Spalten zwischen 2010-04-09 und 2011-06-01 gesammelt. Diese Daten befinden sich in einem anderen Datenrahmen mit demselben Datetime-Index. Jetzt möchte ich die alten Spalten im ursprünglichen Dataset mit den Werten des neuen Datasets füllen, aber ich scheine es nicht zu tun.Wie füge ich zwei Spalten in einem Datenrahmen basierend auf einem Datetime-Index zusammen?

Meine ursprüngliche Datenrahmen sieht wie folgt aus:

>>> data.head() 
         bc_conc stability wind_speed Qnet Visibility \ 
2010-04-09 10:00:00 609.542000  NaN   NaN NaN   NaN 
2010-04-09 11:00:00 663.500000  NaN   NaN NaN   NaN 
2010-04-09 12:00:00 524.661667  NaN   NaN NaN   NaN 
2010-04-09 13:00:00 228.706667  NaN   NaN NaN   NaN 
2010-04-09 14:00:00 279.721667  NaN   NaN NaN   NaN 

         wind_direction Rain seizoen clouds 
2010-04-09 10:00:00    NaN NaN lente  1 
2010-04-09 11:00:00    NaN NaN lente  6 
2010-04-09 12:00:00    NaN NaN lente  8 
2010-04-09 13:00:00    NaN NaN lente  4 
2010-04-09 14:00:00    NaN NaN lente  7 

Die Datenrahmen Ich möchte wie folgt aussieht hinzuzufügen:

>>> df.loc['20100409'] 
        Qnet Rain Windspeed Winddirection 

2010-04-09 10:00:00 326.3 0.0  2.4   288 
2010-04-09 11:00:00 331.8 0.0  3.6   308 
2010-04-09 12:00:00 212.7 0.0  3.8   349 
2010-04-09 13:00:00 246.6 0.0  4.1   354 
2010-04-09 14:00:00 422.7 0.0  4.5   343 
2010-04-09 15:00:00 210.9 0.0  4.6   356 
2010-04-09 16:00:00 120.6 0.0  4.5    3 
2010-04-09 17:00:00 83.3 0.0  4.5    4 
2010-04-09 18:00:00 -23.8 0.0  3.3    7 
2010-04-09 19:00:00 -54.0 0.0  3.0    15 
2010-04-09 20:00:00 -44.3 0.0  2.7    3 
2010-04-09 21:00:00 -41.9 0.0  2.6    3 
2010-04-09 22:00:00 -42.1 0.0  2.2    1 
2010-04-09 23:00:00 -47.4 0.0  2.2    2 

Deshalb möchte ich die Werte von df hinzufügen [ ‚Qnet‘] zu Daten ['Qnet'], usw.

Ich habe viele Dinge mit Merge und Join versucht, aber nichts scheint wirklich zu funktionieren. Es gibt keine überlappenden Daten in den Frames. Der 'df'-Datenrahmen stoppt am 2011-05-31 und der' Daten'-Datenrahmen hat bis zu diesem Datum NaN-Werte in den Spalten, die ich ändern möchte. Die ursprünglichen Spalten in Daten haben Werte vom 2011-06-01 und ich möchte diese behalten!

Ich weiß, wie die beiden Datensätze zusammenführen, aber dann bekomme ich eine Qnet_x und eine Qnet_y Spalte.

Also die Fragen ist, wie ich zwei Spalten in 2 oder den gleichen Datensatz kombinieren/zusammenführen.

Ich hoffe, die Frage klar ist

Vielen Dank im Voraus für die Hilfe

+0

könnten Sie bitte die Beispieldatensätze bereitzustellen, die durch den Index verbunden werden können? – MaxU

Antwort

0

UPDATE2:

data = data.join(df['Qnet'], rsuffix='_new') 
data['Qnet'] = data['Qnet'].combine_first(data['Qnet_new']) 
data.drop(['Qnet_new'], axis=1, inplace=True) 

:

diese Version auch mit Dubletten im Index funktionieren soll UPDATE:

data.ix[pd.isnull(data.Qnet), 'Qnet'] = df['Qnet'] 

In [114]: data.loc[data.index[-1], 'Qnet'] = 9999 

In [115]: data 
Out[115]: 
         bc_conc stability wind_speed Qnet Visibility \ 
2010-04-09 10:00:00 609.542000  NaN   NaN  NaN   NaN 
2010-04-09 11:00:00 663.500000  NaN   NaN  NaN   NaN 
2010-04-09 12:00:00 524.661667  NaN   NaN  NaN   NaN 
2010-04-09 13:00:00 228.706667  NaN   NaN  NaN   NaN 
2010-04-09 14:00:00 279.721667  NaN   NaN 9999.0   NaN 

        wind_direction Rain seizoen clouds 
2010-04-09 10:00:00    NaN NaN lente  1 
2010-04-09 11:00:00    NaN NaN lente  6 
2010-04-09 12:00:00    NaN NaN lente  8 
2010-04-09 13:00:00    NaN NaN lente  4 
2010-04-09 14:00:00    NaN NaN lente  7 

In [116]: data.ix[pd.isnull(data.Qnet), 'Qnet'] = df['Qnet'] 

In [117]: data 
Out[117]: 
         bc_conc stability wind_speed Qnet Visibility \ 
2010-04-09 10:00:00 609.542000  NaN   NaN 326.3   NaN 
2010-04-09 11:00:00 663.500000  NaN   NaN 331.8   NaN 
2010-04-09 12:00:00 524.661667  NaN   NaN 212.7   NaN 
2010-04-09 13:00:00 228.706667  NaN   NaN 246.6   NaN 
2010-04-09 14:00:00 279.721667  NaN   NaN 9999.0   NaN 

        wind_direction Rain seizoen clouds 
2010-04-09 10:00:00    NaN NaN lente  1 
2010-04-09 11:00:00    NaN NaN lente  6 
2010-04-09 12:00:00    NaN NaN lente  8 
2010-04-09 13:00:00    NaN NaN lente  4 
2010-04-09 14:00:00    NaN NaN lente  7 

ALTE Antwort:

Sie können es auf diese Weise tun:

In [97]: data.drop(['Qnet'], axis=1).join(df['Qnet']) 
Out[97]: 
         bc_conc stability wind_speed Visibility \ 
2010-04-09 10:00:00 609.542000  NaN   NaN   NaN 
2010-04-09 11:00:00 663.500000  NaN   NaN   NaN 
2010-04-09 12:00:00 524.661667  NaN   NaN   NaN 
2010-04-09 13:00:00 228.706667  NaN   NaN   NaN 
2010-04-09 14:00:00 279.721667  NaN   NaN   NaN 

        wind_direction Rain seizoen clouds Qnet 
2010-04-09 10:00:00    NaN NaN lente  1 326.3 
2010-04-09 11:00:00    NaN NaN lente  6 331.8 
2010-04-09 12:00:00    NaN NaN lente  8 212.7 
2010-04-09 13:00:00    NaN NaN lente  4 246.6 
2010-04-09 14:00:00    NaN NaN lente  7 422.7 
+0

Wenn ich diese Methode versuche, ändern sich die Werte nach 2011-06-01 in NaN :( – joanne

+0

Ich erhalte einen Fehler: test = data.ix [pd.isnull (data.Qnet), 'Qnet'] = df ['Qnet '] ValueError: kann nicht von einer doppelten Achse neu indizieren – joanne

+0

Die ganze Antwort passt nicht in den Kommentarkasten .. :( – joanne

Verwandte Themen