Как объединить две строки с одинаковыми значениями в одну строку в Python? - PullRequest
2 голосов
/ 14 мая 2019

У меня есть таблица с именем «data», значения которой будут такими, как следующие,

ID  NAME    DOB LOCATION
1   bob 08/10/1985  NEW JERSEY
1   bob 15/09/1987  NEW YORK
2   John    08/10/1985  NORTH CAROLINA
2   John    26/11/1990  OKLAHOMA

Например Я хочу вывод, как,

ID  NAME    No.of.Days                 
1   bob difference of two given dates in days   
2   John    difference of two given dates in days

Пожалуйста, помогите мне сформировать код Python для получения ожидаемого результата.

Ответы [ 2 ]

1 голос
/ 14 мая 2019

Во-первых, вам нужно конвертировать Date столбец в date формат.Предположим, что вы читаете из .csv, затем читаете ваш .csv файл следующим образом

df = pd.read_csv('yourfile.csv', parse_dates = ['DOB'])

, в противном случае преобразуйте существующий столбец данных в формат date следующим образом.

df['DOB'] = pd.to_datetime(df['DOB'])

теперь вы можете выполнять обычные числовые операции.

df.groupby(['ID','NAME'])['DOB'].apply(lambda x: abs(pd.to_datetime(list(x)[0]) - pd.to_datetime(list(x)[1]))).reset_index(name='No.Of.Days')
1 голос
/ 14 мая 2019

Если для данного идентификатора будет только две даты в, то ниже работает!

df.groupby(['ID','NAME'])['DOB'].apply(lambda x: abs(pd.to_datetime(list(x)[0]) - pd.to_datetime(list(x)[1]))).reset_index(name='No.Of.Days')

Вывод

   ID   NAME  No.Of.Days
0    1    bob   766 days
1    2   John  1934 days

Вы можете использовать np.diff также

df.groupby(['ID','NAME'])['DOB'].apply(lambda x: np.diff(list(x))[0]).reset_index(name='No.Of.Days')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...