Проверка уникальных значений в Pandas столбце фрейма данных и перекрестные ссылки со вторым столбцом - PullRequest
2 голосов
/ 07 августа 2020

У меня есть pandas фрейм данных, который выглядит примерно так, как показано ниже.

Я хочу проверить значения в User ID, чтобы узнать, является ли он уникальным. Если да, то я хочу проверить столбец Тип лицензии, чтобы узнать, является ли это полная пробная версия, а затем вернуть 1 в новом столбце «Full_direct». В противном случае я бы вернул 0 в столбце full_direct.

    Date         **User ID**          Product Name  License Type    Month   
0   2017-01-01  10431046623214402832 90295d194237   trial       2017-01 
1   2017-07-09  246853380240772174  29125b243095    trial       2017-07 
2   2017-07-07  13685844038024265672    47423e1485  trial       2017-07 
3   2017-02-12  2475366081966194134 202400c85587    full        2017-02 
4   2017-04-08  761179767639020420  168300g168004   full        2017-04 

Я сделал эту попытку, но не смог выполнить итерацию по фрейму данных таким образом. Я надеялся узнать, может ли кто-нибудь посоветовать. Спасибо!

for values in main_df['User ID']:
    if values.is_unique and main_df['License Type'] == 'full':
        main_df['Full_Direct'] = 1
    else:
        main_df['Full_direct'] = 0

1 Ответ

1 голос
/ 07 августа 2020

Нам здесь не нужен l oop, попробуем duplicated

df['Full_direct'] = ((~df['User ID'].duplicated(keep=False)) & (df['License Type'] == 'full')).astype(int)

Исправим ваш код

for values in df.index:
      if df['UserID'].isin([df.loc[values,'User ID']]).sum()==1 and df.loc[values,'License Type'] == 'full':
           df.loc[values,'Full_direct'] = 1
      else:
           df.loc[values,'Full_direct'] = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...