Есть ли элегантный способ объединить значения двух столбцов с одинаковыми именами в двух разных фреймах данных, обновив значения в первом фрейме данных со значениями столбца во втором ядре данных, если значения (т.е. не нуль) во втором блоке данных?pandas: обновление значений столбцов при слиянии DataFrames
Так, если два dataframes являются:
df1 = pd.DataFrame([ 1, 2, None, 3], columns=["a"], index=[0,1,2,3])
df2 = pd.DataFrame([ None, None, 4, 5], columns=["a"], index=[0,1,2,3])
то желаемый результат будет:
df3 = pd.DataFrame([ 1, 2, 4, 5], columns=["a"], index=[0,1,2,3])
В то время как я могу представить себе, как делает это путем выполнения первого слияния(), а затем используя 'apply()' с пользовательской функцией, чтобы объединить значения полученных столбцов вместе, это кажется слишком сложным. Более того, мне нужно сделать это для нескольких столбцов. Есть ли более элегантный способ сделать это?
Функция, которую я ищу, будет вести себя так, как если бы выполнялось левое слияние с 'overwrite_values = True', за исключением того факта, что последний параметр не существует, конечно.
Несколько более сложный пример с двумя колонками:
df1 = pd.DataFrame([ [1, 'a'], [2, 'b'], [None, None], [3, None] ],
columns=["a", "b"], index=[0,1,2,3])
df2 = pd.DataFrame([ [None, None],[None, 'x'],[4, 'c'], [5, 'd'] ],
columns=["a", "b"], index=[0,1,2,3])
то желаемый результат будет:
df3 = pd.DataFrame([ [1, 'a'], [2, 'x'], [4, 'c'], [5, 'd']],
columns=["a", "b"], index=[0,1,2,3])
Большое спасибо!
Действительно, спасибо за быстрый ответ! В этом случае для получения желаемого результата нужно будет df2.combine_first (df1) (так что второй фрейм, вызывающий функцию). – tibi3000