У меня есть два dfs:
df1 = pd.DataFrame({'name':['foo','Bar','Foo','jim','john','mary','jim'],
'code1':[np.nan,np.nan,'432',np.nan,np.nan,np.nan,'563']})
df1
name code1
0 foo NaN
1 Bar NaN
2 Foo 432
3 jim NaN
4 john NaN
5 mary NaN
6 jim 563
df2 = pd.DataFrame({'xyz':['this','column','doesnt','matter'],
'code2':['123','345','456','234']})
df2
xyz code2
0 this 123
1 column 345
2 doesnt 456
3 matter 234
В столбце code1
в df1 отсутствуют значения. Мне не нужно ничего совпадать, я просто хочу добавить несколько дополнительных кодов в этот столбец.
Итак, у меня есть df2 со столбцом code2
. Я хочу взять эти четыре кода и добавить их в четыре ячейки в df1.
Мой ожидаемый результат такой:
df3
name code
0 foo 123 # new code
1 Bar 345 # new code
2 Foo 432 # code unchanged
3 jim 456 # new code
4 john 234 # new code
5 mary NaN # not important
6 jim 563 # code unchanged
Что я пробовал до сих пор?
Я сохранил коды из df2
codes = df2['code2']
codes
0 123
1 345
2 456
3 234
Name: code, dtype: object
Затем я отфильтровал df1, чтобы он имел только нулевые коды, поскольку я не хочу заменять присутствующие коды, и, поскольку у меня есть только четыре новых кода для вставки, я получил первые четыре строки df1 и назначил новые коды для они:
mask = df1['code1'].isnull()
df1['code1'][mask][:4] = codes
Однако с df1 ничего не произошло. Все еще есть нанс.
Некоторые другие вещи, которые я пытался получить значения, но тоже не работали:
df1['code1'][mask][:4].values = codes.values
А потом у меня просто заканчиваются идеи здесь. Не работает
df1['code1'][mask][list(range(4))] = codes.values