сравнить 2 кадра данных и добавить столбцы в порядке, если не существует - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть 2 кадра данных.df_A - это шаблон данных, который имеет определенное количество столбцов в порядке.

Например: [emp_id, first_name, фамилия, возраст, пол, отдел]

df_B - это кадр данных, который может содержать или не содержать все столбцы df_A.

Например: [emp_id, first_name, last_name, age, dept] = [001, john, mathew, 32, 047]

Я хочу сравнить df_B и df_A для создания нового кадра данных с [001, john, mathew, None, 047] с именами столбцов, такими же, как у df_A.

Я использую Python 3. Я пытался использовать

col_diff = df_A.columns.difference(df_B) 

, чтобы получить столбец «пол».Затем преобразуйте его в список

col_diff.tolist() 

и добавьте его в df_B.Но этот столбец добавляется в конец df_B, и я получаю

[001, john, mathew, 047, None]

Но я хочу сохранить порядок столбцов такой же, как у df_A.

Вывод должен быть следующим: [001, Джон, Мэтью, Нет, 047]

Не могли бы вы помочь?Спасибо за ваше время.

1 Ответ

0 голосов
/ 28 ноября 2018

Данные:

c1 = ['emp_id', 'first_name', 'last_name', 'age', 'gender', 'dept']
df_A = pd.DataFrame(columns=c1)
print (df_A)
Empty DataFrame
Columns: [emp_id, first_name, last_name, age, gender, dept]
Index: []

c2 = ['emp_id', 'first_name', 'last_name', 'age', 'dept']
df_B = pd.DataFrame([[ '001', 'john', 'mathew', 32, '047']], columns=c2)
print (df_B)
  emp_id first_name last_name  age dept
0    001       john    mathew   32  047

Сначала получите разницу столбцов на difference, затем assign новые столбцы, созданные dict.fromkeys и последние длятот же порядок использования reindex:

col_diff = df_A.columns.difference(df_B.columns) 
print (col_diff)
Index(['gender'], dtype='object')

df = df_B.assign(**dict.fromkeys(col_diff, None)).reindex(columns=df_A.columns)
print (df)
  emp_id first_name last_name  age gender dept
0    001       john    mathew   32   None  047

Другое решение:

df = df_B.reindex(columns=df_A.columns)
print (df)
  emp_id first_name last_name  age  gender dept
0    001       john    mathew   32     NaN  047
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...