Я видел разные версии этого вопроса, но ни одна из них не соответствует тому, что я пытаюсь сделать: вот мои данные:
Вот df с NaN
s:
df = pd.DataFrame({"A": ["10023", "10040", np.nan, "12345", np.nan, np.nan, "10033", np.nan, np.nan],
"B": [",", "17,-6", "19,-2", "17,-5", "37,-5", ",", "9,-10", "19,-2", "2,-5"],
"C": ["small", "large", "large", "small", "small", "large", "small", "small", "large"]})
A B C
0 10023 , small
1 10040 17,-6 large
2 NaN 19,-2 large
3 12345 17,-5 small
4 NaN 37,-5 small
5 NaN , large
6 10033 9,-10 small
7 NaN 19,-2 small
8 NaN 2,-5 large
Далее у меня есть поиск df с именем df2
:
df2 = pd.DataFrame({"B": ['17,-5', '19,-2', '37,-5', '9,-10'],
"A": ["10040", "54321", "12345", "10033"]})
B A
0 17,-5 10040
1 19,-2 54321
2 37,-5 12345
3 9,-10 10033
Я бы хотел заполнить NaN
s столбца A
на df
, просмотрев столбец df2.B
и вернув df2.A
так, чтобы результирующий dfr
выглядел так:
A B C
0 10023 , small
1 10040 17,-6 large
2 54321 19,-2 large
3 10040 17,-5 small
4 12345 37,-5 small
5 NaN , large
6 10033 9,-10 small
7 54321 19,-2 small
8 NaN 2,-5 large
Важные замечания:
- У
df
нет соответствующих индексов
- Содержимое
df.A
и df2.A
не является уникальным ()
- Строки
df2
составляют уникальные пары.
- Предположим, что есть еще несколько столбцов, которые не показаны, с
NaN
s.
Используя панд, интересующие строки на df
будут найдены (я думаю) через: df.loc[df['A'].isnull(),]
. Этот ответ показался многообещающим, но мне неясно, откуда взялся df1
в этом примере. Мой фактический набор данных намного больше, чем этот, и мне нужно будет заменить несколько столбцов таким образом.