Я пытаюсь обновить пару полей одновременно - у меня есть два источника данных, и я пытаюсь их согласовать. Я знаю, что смогу сделать некоторое уродливое слияние, а затем удалить столбцы, но ожидал, что этот код будет работать ниже:
df = pd.DataFrame([['A','B','C',np.nan,np.nan,np.nan],
['D','E','F',np.nan,np.nan,np.nan],[np.nan,np.nan,np.nan,'a','b','d'],
[np.nan,np.nan,np.nan,'d','e','f']], columns = ['Col1','Col2','Col3','col1_v2','col2_v2','col3_v2'])
print df
Col1 Col2 Col3 col1_v2 col2_v2 col3_v2
0 A B C NaN NaN NaN
1 D E F NaN NaN NaN
2 NaN NaN NaN a b d
3 NaN NaN NaN d e f
#update
df.loc[df['Col1'].isnull(),['Col1','Col2', 'Col3']] = df[['col1_v2','col2_v2','col3_v2']]
print df
Col1 Col2 Col3 col1_v2 col2_v2 col3_v2
0 A B C NaN NaN NaN
1 D E F NaN NaN NaN
2 NaN NaN NaN a b d
3 NaN NaN NaN d e f
Мой желаемый результат:
Col1 Col2 Col3 col1_v2 col2_v2 col3_v2
0 A B C NaN NaN NaN
1 D E F NaN NaN NaN
2 a b c a b d
3 d e f d e f
Я уверен, что это связано с обновлением/настройкой на срезе, но я всегда использую .loc для обновления значений, а не только для нескольких столбцов одновременно.
Я чувствую, что есть простой способ сделать это, что я просто отсутствую, любые мысли/предложения будут приветствоваться!
Изменить, чтобы отразить решение ниже Спасибо за комментарий к индексам. Однако у меня есть вопрос об этом, поскольку он относится к серии. Если бы я хотел обновить отдельную серию аналогичным образом, я мог бы сделать что-то вроде этого:
df.loc[df['Col1'].isnull(),['Col1']] = df['col1_v2']
print df
Col1 Col2 Col3 col1_v2 col2_v2 col3_v2
0 A B C NaN NaN NaN
1 D E F NaN NaN NaN
2 a NaN NaN a b d
3 d NaN NaN d e f
Обратите внимание, что здесь я не учитывал индексы, я отфильтровывался до серии 2x1 и устанавливал значение, равное серии 4x1, но он правильно его обрабатывал. Мысли? Я пытаюсь понять функциональность немного лучше того, что я использовал какое-то время, но, я думаю, не имеет полного понимания основного механизма/правила