Панды: объединить строковые значения из 2 столбцов во фрейме данных в новый столбец, используя правила - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть Pandas df, где я пытаюсь объединить строковые значения из 2 разных столбцов в один новый столбец в df, используя правила.Я сталкиваюсь с проблемами, потому что я не могу получить код для выбора подходящих значений в столбцах на основе бизнес-логики / правил, которые я пытаюсь использовать.

Ниже приведен пример df:


ID      Date        Original    New
ID1000  1/1/2019    High    
ID2000  4/10/2019               Moderate
ID3000  4/15/2019   High        Critical
ID4000  1/30/2019   Low         Moderate


#code to replicate example df

import pandas as pd

lst= [['ID1000','1/1/2019','High',''],
      ['ID2000','4/10/2019','','Moderate'],
      ['ID3000','4/15/2019','High','Critical'],
      ['ID4000','1/30/2019','Low','Moderate'],
     ]

df= pd.DataFrame(lst,columns=['ID','Date','Original','New'], dtype = float)
df


Из этого df мне нужно создать столбец [Комбинированный], который следует следующим правилам:

  1. Если [Дата] <4/4/2019, используйте значениеиз строки столбца [Оригинал] </li>
  2. Если [Дата]>> = 4/4/2019, используйте значение из строки столбца [Новый]
  3. Если [Дата] <4/ 4/2019 и существует значение строки столбца [New], используйте значение из строки столбца [New]. </li>

Полученный df должен выглядеть следующим образом:


ID      Date        Original  New        Combined
ID1000  1/1/2019    High                 High
ID2000  4/10/2019             Moderate   Moderate
ID3000  4/15/2019   High      Critical   Critical
ID4000  1/30/2019   Low       Moderate   Moderate

Я пытался применить приведенные выше правила, похожие на вложенные в Excel IF, но безуспешно.Это код, который я использовал.


['Date']=pd.to_datetime(result['Date'])

[Combined]= if {['Date']<4/4/2019,[Original],
                if{['Date']>=4/4/2019,[New],
                if{['Date']<4/4/2019 & ['New']>0,[New]}}}

Я ожидал, что будет создан новый столбец [Комбинированный] и что значения в столбце будут такими: «Высокий», «Умеренный», «Критический»,«Умеренный».

Когда я применил приведенную выше логику, я получил эту ошибку «неверный синтаксис» ниже:

File "<ipython-input-13-33cb4e8d5ca7>", line 3
    [Combined]= if {['Date']<4/4/2019,[Original],
                 ^
SyntaxError: invalid syntax

Я просмотрел последние несколько дней в документации, но яне могу понять, как объединить значения из 2 столбцов в новый столбец с правилами.Кроме того, я не сталкивался с вариантом использования, подобным этому, со строками.

Может кто-нибудь помочь мне с этим?Возможно, есть лучший подход.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 29 апреля 2019

Вы можете объединить ваше условие 2 и 3 и затем использовать np.where():

df['Date'] = pd.to_datetime(df.Date)
df['Combine'] = np.where((df.Date >= pd.datetime(2019,4,4)) | (df.New.ne('') & ~df.New.isnull()), df.New, df.Original)
0 голосов
/ 29 апреля 2019

Я использую np.select из numpy

import numpy as np 
con1=df.Date<'2019-04-04'
con2=df.Date>='2019-04-04'
con3=con1&df.New.ne('')
df['Combine']=np.select([con1,con2,con3],[df.Original,df.New,df.New])
df
Out[84]: 
       ID       Date Original       New   Combine
0  ID1000 2019-01-01     High                High
1  ID2000 2019-04-10           Moderate  Moderate
2  ID3000 2019-04-15     High  Critical  Critical
3  ID4000 2019-01-30      Low  Moderate       Low
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...