Выполните итерацию в столбце для указанного значения c и вставьте 1, если найдено, или 0, если не найдено в новом столбце python - PullRequest
0 голосов
/ 17 марта 2020

У меня есть DataFrame, как показано на прикрепленном изображении. Мои интересующие колонки фгр и фгр1 . Как вы можете видеть, они оба содержат значения, соответствующие годам.

Я хочу выполнить итерацию в двух столбцах, и для любого существующего значения я хочу 1 , если значение присутствует, или иначе 0 .

Например, в fgr первое значение равно 2028. Таким образом, первая строка в столбце 2028 будет иметь значение 1, а все остальные столбцы будут иметь значение 0.

Я попытался использовать lookup , но мне это не удалось. Таким образом, любые указатели будут действительно полезны.

Пример кадра данных

Данные: Файл данных в Excel

Ответы [ 2 ]

0 голосов
/ 17 марта 2020

Из этого ответа

Не самый эффективный, но должен работать для вашего случая ( много времени, если большой набор данных )

s = df.reset_index().melt(['index','fgr','fgr1'])
s['value'] = s.variable.eq(s.fgr.str[:4]).astype(int)
s['value2'] = s.variable.eq(s.fgr1.str[:4]).astype(int)
s['final'] = np.where(s['value']+s['value2'] > 0,1,0)
yourdf = s.pivot_table(index=['index','fgr','fgr1'],columns = 'variable',values='final',aggfunc='first').reset_index(level=[1,2])
yourdf
0 голосов
/ 17 марта 2020

Эта заливка у тебя на работе. Вы также можете использовать для циклов, но я думаю, что этот подход будет быстрее.

df ["Matched"] = df ["fgr"]. Isin (df ["fgr1"]) * 1

В основном вы проверяете, находятся ли значения из одного в столбце anoter, и если они есть, вы получаете True или False. Затем вы умножаете на 1, чтобы получить 1 и 0 вместо True или False.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...