Добавление новых столбцов из одного другого столбца с третьим отфильтрованным столбцом - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть 2 столбца (заранее извиняюсь за имена!) «Исходный статус исторического случая» и «Дата начала исторического статуса»:

Исходный статус исторического случая: содержит три статуса для данного случая ИсторическийДата начала статуса: содержит дату для этого статуса для данного случая

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

def closed_cases():
    df_copy = df.copy()
    df['Date Closed'] = np.nan
    df_copy.loc[df['Historical Case Status Raw'] == "Closed", 'Date Closed'] = df['Historical Status Start Date']
    return df_copy

Я не уверен, как сделать то же самое для статуса«Зарегистрировано», затем создайте новый столбец под названием «Дата регистрации» и «Новый».

В Excel я выполняю 3 V-поиска, чтобы сделать это с тремя отдельными наборами данных, однако есть объединенный наборданных в этом формате, которые я надеюсь использовать для экономии времени.

Редактировать: Я нашел что-то, что работает, хотя и медленно:

df['Date Closed'] = np.nan
df['Date Enrolled'] = np.nan
df['Date New'] = np.nan

for i in df['Historical Case Status Raw']:
    if i == "Closed":
        df.loc[df['Historical Case Status Raw'] == "Closed", 'Date Closed'] = df['Historical Status Start Date']
    elif i == "Enrolled":
        df.loc[df['Historical Case Status Raw'] == "Enrolled", 'Date Enrolled'] = df['Historical Status Start Date']
    elif i == "New":
        df.loc[df['Historical Case Status Raw'] == "New", 'Date New'] = df['Historical Status Start Date']

1 Ответ

0 голосов
/ 15 февраля 2019

Если вам нужно что-то быстрее, вам нужно лучше использовать возможности нарезки пандами.Вам редко (если когда-либо) нужно перебирать каждое значение в Серии, если вы используете его правильно.У меня нет данных для тестирования, но, возможно, попробуйте что-то похожее на это:

df['Date Closed'] = np.nan
df['Date Enrolled'] = np.nan
df['Date New'] = np.nan
universe = ['Closed', 'Enrolled', 'New']

for status in universe:
    selection = df['Historical Case Status Raw'] == status
    mySlice = df['Historical Case Status Raw'].loc[selection]
    df[f"Date {status}"].loc[selection] = mySlice

Примечание: в вашем цикле похоже, что вы присваиваете целую серию фрагменту изодин и тот же кадр данных каждый раз, когда вы находитесь в одном из блоков if.Опять же, не глядя на ваш набор данных, я не могу быть уверен, но для меня это выглядит как красный флаг.

В любом случае, это мои два цента.Надеюсь, это поможет:)

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