Попытка вернуть запись из фрейма данных споёт эталонный фрейм данных - PullRequest
0 голосов
/ 23 октября 2018

У меня есть фрейм данных (DeptTemplate) .head () которого выглядит следующим образом:

       Name     Status  Status change date   Product
0       Bob    CURRENT                 NaN   Pencils
1     Steve    CURRENT                 NaN      Pens
2   Heather NEW JOINER          02/08/2018     Paper
3     Lizzy NEW JOINER          06/02/2018      Pens
4     Ralph       LEFT                 NaN     Paper

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

Приведенный ниже код объясняет мою методологию:

 def checkStatusChangeDate(DeptTemplate,filename,filepath, referencePeriodStartDate, referencePeriodEndDate,writer):
        #This code checks if a status is not current that there is a status change date attached

        test = DeptTemplate[DeptTemplate.Status != "CURRENT"]

        pd.to_datetime(test['Status change date'])

        test['Status change date'].dt.strftime('%d/%m/%Y')   

        statusError = test['Status change date'] == 'NaT'

        finalError = DeptTemplate.loc[statusError['Status change date']]

Прежде всего, я идентифицирую записи, которые не являются «ТЕКУЩИМИ».Затем я определяю из этого подмножества любые записи, которые не имеют даты изменения статуса.Я получаю statusError фрейм данных, который выглядит следующим образом:

4    False

, где единственная запись, которая не имеет ТЕКУЩЕГО статуса и не имеет даты изменения статуса, предназначена для Ральфа.

Битзатем я пытаюсь вернуть всю запись Ральфа, ссылаясь на statusError фрейм данных против исходного DeptTemplate.

Я пытаюсь использовать:

либо:

finalError = DeptTemplate.loc[statusError['Status change date']]

или

finalError = DeptTemplate[statusError['Status change date']]

, но не могу получить всю запись для возврата в finalError фрейме данных

(поэтому я получаю finalError фрейм данныхэто выглядит так:

       Name     Status  Status change date   Product
4     Ralph       LEFT                 NaN     Paper

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Вы почти на месте, но вы пытаетесь нарезать свой оригинал DataFrame, используя кусочек другого DataFrame - это не сработает, потому что это не одно и то же.

Шаг 1: Установите логические маски

not_current = df['STATUS'] != 'CURRENT'

no_date_change = df['Status change date'].isnull()

Шаг 2: Используйте маски

df[not_current & no_date_change]
0 голосов
/ 23 октября 2018

Если я вас правильно понял: вы хотите найти одну запись, которая не содержит дату изменения и статус CURRENT, а затем хотите вернуть все остальные записи для этого.Так что, если есть другие записи для Ральфа, например, вы также хотите их получить.

Мое решение для этого было бы:

import pandas as pd 


data = {"Name":["Bob","Steve","Heather","Lizzy","Ralph","Ralph","Ralph"],
    "Status":["CURRENT","CURRENT","NEW JOINER","NEW JOINER","LEFT","CURRENT","CURRENT"],
    "Status change date": ["","","02/08/2018","06/02/2018","","06/02/2018","06/02/2018"],
    "Product":["Pencils","Pens","Paper","Pens","Paper","Pencils","Pens"]}

df = pd.DataFrame(data)

df["Status change date"]=pd.to_datetime(df["Status change date"])

df.head()
      Name      Status Status change date  Product
0      Bob     CURRENT                NaT  Pencils
1    Steve     CURRENT                NaT     Pens
2  Heather  NEW JOINER         2018-02-08    Paper
3    Lizzy  NEW JOINER         2018-06-02     Pens
4    Ralph        LEFT                NaT    Paper
5    Ralph     CURRENT         2018-06-02  Pencils
6    Ralph     CURRENT         2018-06-02     Pens

получить все записи, которые не имеют текущего состояния и даты изменения статуса:

finalError = df[(df["Status"]!="CURRENT") & (df["Status change date"].isnull())]

finalError.head()

    Name Status Status change date Product
4  Ralph   LEFT                NaT   Paper

Теперь проверьте наличиеимена в старом фрейме данных, чтобы получить все записи от Ральфа.

df[df["Name"]==finalError["Name"].any()]

    Name   Status Status change date  Product
4  Ralph     LEFT                NaT    Paper
5  Ralph  CURRENT         2018-06-02  Pencils
6  Ralph  CURRENT         2018-06-02     Pens
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...