Как получить даты вместе с функциями, которые я выполняю? - PullRequest
0 голосов
/ 30 ноября 2018

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

import pandas as pd
df = pd.DataFrame({'serialNo':['aaaa','aaaa','cccc','ffff'],
               'Date':['2018-09-15','2018-09-16','2018-09-15','2018-09-19'],
               'moduleLocation':   ['face','head','stomach','legs'],
               'moduleName':   ['singing', 'dance','booze', 'vocals'],
               'warning': [4402, 3747 ,5555,8754],
               'failed':[0,3462,5161,3262]})

Я выполнил следующие функции для очистки данных, во-первых, чтобы все типы данных были представлены в виде строки:

all_columns = list(df)
df[all_columns] = df[all_columns].astype(str)

Далее следует функция для выполнения определенных конкатенаций:

def concatenate(diagnostics, field, target):
    diagnostics.sort_values(by=['serialNo',field],inplace=True)
    diagnostics.drop_duplicates(inplace=True)
    diagnostics[target] = \
    diagnostics.groupby(['serialNo'], as_index=False)[field].transform(lambda s: ','.join(filter(None, s)))
    diagnostics.drop([field],axis=1,inplace=True)
    diagnostics.drop_duplicates(inplace=True)
    return diagnostics

module = concatenate(df[['serialNo','moduleName']], 'moduleName', 'Module')
Warn = concatenate(df[['serialNo','warning']], 'warning', 'Warn')
Err = concatenate(df[['serialNo','failed']], 'failed', 'Err')
Location = concatenate(df[['serialNo','moduleLocation']], 'moduleLocation', 'Location')

diag_final = pd.merge(module,Warn,on=['serialNo'],how='inner')
diag_final = pd.merge(diag_final,Err,on=['serialNo'],how='inner')
diag_final = pd.merge(diag_final,Location,on=['serialNo'],how='inner')

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

1 Ответ

0 голосов
/ 30 ноября 2018

Вероятно, будет несколько значений для каждого серийного номера.Следовательно, вам придется объединить значения, аналогично тому, что вы делаете для moduleLocation и moduleName.

dates = concatenate(df[['serialNo','Date']], 'Date', 'Date_cat')
diag_final = pd.merge(diag_final,dates,on=['serialNo'],how='inner')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...