ввод кадра данных pandas, совпадающего с двумя столбцами из двух кадров данных - PullRequest
0 голосов
/ 11 июня 2018

У меня есть фрейм данных C и другой фрейм данных S.Я хочу изменить значения в одном из столбцов C, если два столбца в C и S имеют одинаковые значения.

Пожалуйста, рассмотрите приведенный ниже пример,

C.head(3)
   id1     id2  title   val
0   1      0     'abc'   0
1   2      0     'bcd'   0
2   3      0     'efg'   0

S.head(3)
   id1    id2
0   1      1
1   3      0

Я хочу присвоить значение 1 столбцу 'val' в C, соответствующем только строкам, где C.id1 = S.id1 и C.id2 = S.id2

Комбинация (C.id1, ​​C.id2) и (S.id1, ​​S.id2) уникальны в соответствующих таблицах

. В приведенном выше случае я хочу получить результат как

C.head(3)
   id1     id2  title  val
0   1      0    'abc'   0
1   2      0    'bcd'   0
2   3      0    'efg'   1

, как только втретья строка C совпадает с одной из строк S для столбцов id1 и id2.

1 Ответ

0 голосов
/ 11 июня 2018

Я думаю, что нужно merge с левым соединением и параметром indicator, последнее преобразовать маску Boolen в 0 и 1:

#if same columns for join in both df parameter on is possible omit
df = C.merge(S, indicator=True, how='left')
#if multiple same columns in both df
#df = C.merge(S, indicator=True, how='left', on=['id1', 'id2'])
df['val'] = (df['_merge'] == 'both').astype(int)
df = df.drop('_merge', axis=1)
print (df)
   id1  id2  val
0    1    0    0
1    2    0    0
2    3    0    1

Solutiion хорошо работает сновые данные:

df = C.merge(S, indicator=True, how='left')
#if multiple same columns in both df
#df = C.merge(S, indicator=True, how='left', on=['id1', 'id2'])
df['val'] = (df['_merge'] == 'both').astype(int)
df = df.drop('_merge', axis=1)
print (df)
   id1  id2 title  val
0    1    0   abc    0
1    2    0   bcd    0
2    3    0   efg    1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...