2015-05-18 4 views
4

У меня есть два кадра данных в Pandas, которые объединяются вместе df.A и df.B, df.A является оригиналом, а df.B имеет новые данные, которые я хочу переубедить. Слияние работает нормально и, как ожидается, я получаю два столбца col_x и col_y в объединенном df.Слияние только тогда, когда значение пуста/нуль в пандах

Однако в некоторых строках исходный df.A имеет значения, где другой df.B не поддерживает. Мой вопрос: Как я могу выборочно взять значения из col_x и col_y и поместить их в новый col, такой как col_z?

Вот что я имею в виду, как я могу объединить df.A:

date impressions spend col 
1/1/15 100000   3.00  ABC123456 
1/2/15 145000   5.00  ABCD00000 
1/3/15 300000   15.00 (null) 

с df.B

date col 
1/1/15 (null) 
1/2/15 (null) 
1/3/15 DEF123456 

Чтобы получить:

date impressions spend col_z 
1/1/15 100000   3.00  ABC123456 
1/2/15 145000   5.00  ABCD00000 
1/3/15 300000   15.00 DEF123456 

Любая помощь или точка в правильном направлении было бы действительно оценено!

Благодаря

+1

Показать код, который не работает. – martineau

ответ

4

ОК при условии, что ваше (нулевое) значение значений фактически NaN и не то, что строка, то следующие работы:

In [10]: 
# create the merged df 
merged = dfA.merge(dfB, on='date') 
merged 

Out[10]: 
     date impressions spend  col_x  col_y 
0 2015-01-01  100000  3 ABC123456  NaN 
1 2015-01-02  145000  5 ABCD00000  NaN 
2 2015-01-03  300000  15  NaN DEF123456 

Вы можете использовать where условно присвоить значение из _x и _y колонны:

In [11]: 
# now create col_z using where 
merged['col_z'] = merged['col_x'].where(merged['col_x'].notnull(), merged['col_y']) 
merged 

Out[11]: 
     date impressions spend  col_x  col_y  col_z 
0 2015-01-01  100000  3 ABC123456  NaN ABC123456 
1 2015-01-02  145000  5 ABCD00000  NaN ABCD00000 
2 2015-01-03  300000  15  NaN DEF123456 DEF123456 

Вы можете затем drop посторонние колонки:

In [13]: 

merged = merged.drop(['col_x','col_y'],axis=1) 
merged 

Out[13]: 
     date impressions spend  col_z 
0 2015-01-01  100000  3 ABC123456 
1 2015-01-02  145000  5 ABCD00000 
2 2015-01-03  300000  15 DEF123456 
+0

Спасибо! :) –

Смежные вопросы