#python #pandas #dataframe #matching
#python #pandas #фрейм данных #сопоставление
Вопрос:
Предположим, у меня есть фрейм данных pandas df
с 2 столбцами
c1 c2
0 v1 b1
1 v2 b2
2 v3 b3
3 v4 b4
4 v5 b5
Второй df2
фрейм данных содержит c1, c2 и несколько других столбцов.
c1 c2 c3 c4
0 "" b5 500 3
1 "" b2 420 7
2 "" b1 380 5
3 "" b2 470 9
4 "" b3 290 2
Моя цель — заменить пустые значения для c1 в df2 на значения в df, соответствующие значениям в c2, поэтому первые пять значений для c1 в df2 должны быть v5, v2, v1, v2 и v3 соответственно. Каков наилучший способ сделать это?
Ответ №1:
Один из простых способов, который вы можете сделать, это использовать слияние pandas на основе аналогичного столбца.
df2.drop('c1', axis=1, inplace=True)
main_df = pd.merge(df2, df, on="c2", how="left")
df2['c1'] = main_df['c1']
df2.columns = ['c1','c2','c3','c4']
Комментарии:
1. Это дает мне NaNs для c1
2. Затем вы можете удалить столбец C1 из df2. Смотрите обновленный код. Надеюсь, это поможет
Ответ №2:
Что-то вроде этого может быть тем, что вы ищете:
import pandas as pd
import numpy as np
# remove the c1 column from df2
df2.drop("c1", axis=1, inplace=True)
# merge the 2 dataframes and get the c1 values corresponding to c2
newdf = df.merge(df2, on="c2")
Если у вас действительно отсутствуют значения в столбце (например, NAs и некоторые строки, в которых присутствуют значения, решение будет другим)
Комментарии:
1. Нет, в результате это дает пустой фрейм данных. Моя цель — не объединить фреймы данных, а заменить отсутствующие значения в c1 в df2 на значения в df1, соответствующие c2
2. попробуйте сначала запустить это: df2.drop(«c1», axis= 0, inplace= True). Затем запустите другой код.
3. получил эту ошибку KeyError: «[‘c1’] не найден в axis»
4. извините, ось должна быть 1
5. Одна небольшая проблема с этим подходом заключается в том, что после объединения фрейм данных сортируется по c2. Есть ли способ избежать этого?