2016-04-10 3 views
1

Я получил большой набор данных в пандах с индексом datetime. Начало передачи данных в 2010-04-09 и заканчивается на данный момент. Когда я создал этот набор данных, у меня было несколько столбцов, которые имели только данные, начиная с 2011-06-01. Значения выше, где значения NaN. Теперь мне удалось получить данные для нескольких из этих столбцов между 2010-04-09 и 2011-06-01. Эти данные находятся в другом кадре данных с одним и тем же индексом даты и времени. Теперь я хочу заполнить старые столбцы в исходном наборе данных значениями нового, но я, похоже, не могу это сделать.Как объединить два столбца в dataframe на основе индекса datetime?

Мой оригинальный dataframe выглядит следующим образом:

>>> 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 

dataframe Я хочу добавить, выглядит так:

>>> 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 

Поэтому я хочу, чтобы добавить значения ЦФ [ 'Qnet'], чтобы данные ['Qnet'] и т. д.

Я пробовал много вещей слияния и присоединения, но ничего не работает. В кадрах нет перекрывающихся данных. Файловый кадр «df» останавливается в 2011-05-31, а в кадре данных «данные» есть значения NaN до этой даты в столбцах, которые я хочу изменить. Исходные столбцы данных имеют значения с 2011-06-01, и я хочу их сохранить!

Я знаю, как объединить два набора данных, но затем я получу столбец Qnet_x и Qnet_y.

Итак, вопросы: как объединить/слить два столбца в 2 или один и тот же набор данных.

Я надеюсь, что вопрос ясен

Заранее спасибо за помощь

+0

могли бы вы предоставить наборы данных образцов, которые могут быть объединены по индексу? – MaxU

ответ

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) 

ОБНОВЛЕНИЕ:

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 

OLD Ответ:

вы можете сделать это следующим образом:

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

Когда я пытаюсь использовать этот метод, значения после 2011-06-01 меняются на NaN :( – joanne

+0

Я получаю сообщение об ошибке: test = data.ix [pd.isnull (data.Qnet), 'Qnet'] = df ['Qnet '] ValueError: невозможно переиндексировать с дублирующей оси – joanne

+0

Весь ответ не подходит в поле комментариев .. :( – joanne