Сравнение / сопоставление разных рядов в разных фреймах данных

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

У меня есть два фрейма данных. Фрейм данных «A», который является основным фреймом данных, имеет 3 столбца «Номер», «пожертвование» и «Var1». Фрейм данных B содержит 2 столбца «Номер» и «местоположение». Столбец «Number» в фрейме данных B является подмножеством «Number» в A. Что я хотел бы сделать, так это сформировать новый столбец в фрейме данных A — «NEW», который отображал бы значения чисел в обоих столбцах, и если его присутствие в фрейме данных B добавило бы значение как 1, иначе все остальные значения будут равны 0.

 >>>DFA
Number donation Var1
243     4        45
677     56       34
909     34       22
565     78       24 
568     90       21
784     33       88
787     22       66
>>>DFB
Number location
909     PB
565     WB
784     AU
  

Это два фрейма данных, я хочу, чтобы DFA содержал новый столбец, который выглядит примерно так.

 >>>DFA
Number donation Var1 NEW
243     4        45   0 
677     56       34   0
909     34       22   1
565     78       24   1
568     90       21   0
784     33       88   1
787     22       66   0
  

Здесь есть новый столбец, значение которого равно 1, если число присутствовало в DFB, если отсутствует, оно дает 0.

Ответ №1:

Вы могли бы использовать isin метод:

 DFA['NEW'] = (DFA['Number'].isin(DFB['Number'])).astype(int)
  

Например,

 import pandas as pd

DFA = pd.DataFrame({'Number': [243, 677, 909, 565, 568, 784, 787],
                    'Var1': [45, 34, 22, 24, 21, 88, 66],
                    'donation': [4, 56, 34, 78, 90, 33, 22]})
DFB = pd.DataFrame({'Number': [909, 565, 784], 'location': ['PB', 'WB', 'AU']})

DFA['NEW'] = (DFA['Number'].isin(DFB['Number'])).astype(int)
print(DFA)
  

выдает

    Number  Var1  donation  NEW
0     243    45         4    0
1     677    34        56    0
2     909    22        34    1
3     565    24        78    1
4     568    21        90    0
5     784    88        33    1
6     787    66        22    0