2016-09-06 6 views
2

Следующая панды dataframe df1 был сгенерирован:Заменить значение ячейки в пандами dataframe, где значение равно «NaN» со значением из другого/же dataframe

df1 = pd.DataFrame(data = {'Value': [1.989920, 'NaN', -9.363819, 'NaN'], 'Group-Index' : [6, 6, 7, 7], 'Group-Order' : [2, 2, 2, 2], 'Index' : [221, 225, 222, 222] }) 

      Value  Group-Index Group-Order  Index 
221   1.989920 6   2    221 
225   NaN   6   2    225 
222   -9.363819 7   2    222 
278   NaN   7   2    222 

нужно учитывать, что индекс панды изменяется, потому что я использовал dataframe вывод из моего фактического проекта.

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

df2 = pd.DataFrame({'Value': [1.989920, -9.363819], 'Group-Index' : [6, 7], 'Group-Order' : [2, 2], 'Index' : [221, 222] }) 

     Value  Group-Index  Group-Order  Index 
221  1.989920 6    2    221 
222  -9.363819 7    2    222 
  1. Как я могу искать через колонку GC-Value в первом dataframe и найти все значения NaN, а затем заменить их со значением из второго блока данных, где столбец Group-Index и Group-Order одинаковы в обеих строках обоих фреймов данных?

  2. Другим решением моей проблемы было бы скопировать значение из строки, где значение определено для сопоставления NaN-соты с индексом группы и групповым порядком в пределах того же фрейма df1.

Таким образом, результат должен быть:

  Value  Group-Index Group-Order  Index 
221   1.989920 6   2    221 
225   1.989920 6   2    225 
222   -9.363819 7   2    222 
278   -9.363819 7   2    222 

ответ

1
vnull = df1.Value.isnull() 
mrg_cols = ['Group-Index', 'Group-Order'] 
df1.loc[vnull, 'Value'] = df2.merge(df1.loc[vnull, mrg_cols]).Value.values 

df1 

enter image description here

+0

Извините, но это решение не работает. Выходной сигнал ошибки отсутствует, и первый dataframe df1 остается неизменным. Я добавил две строки, чтобы легко создавать фреймы данных, на которые я ссылаюсь. – markj

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