Как получить максимальное значение даты из группы столбцов даты - PullRequest
0 голосов
/ 28 августа 2018

Это пример данных:

import pandas as pd
d = {'name': ['john', 'tom', 'phill', 'nero', 'bob', 'rob'], 'date1' :['2015-10-05', '2015-01-05', '2015-07-06', '2015-10-06', '2015-10-06', '2015-12-08'], 'date2' :['2015-10-05', '2015-01-05', '2015-07-06', '2015-08-06', '2015-09-06', '2015-12-08'], 'date3' :['2015-07-05', '2015-11-05', '2015-07-06', '2015-11-06', '2015-05-06', '2015-05-08']}
df2 = pd.DataFrame(data = d)
df2['date1'] = pd.DatetimeIndex(df2['date1'])
df2['date2'] = pd.DatetimeIndex(df2['date2'])
df2['date3'] = pd.DatetimeIndex(df2['date3'])

Это таблица

enter image description here

Проблема 1: я хочу создать новый столбец max_date, который будет иметь максимальное значение даты для каждой строки. Я думал, что смогу создать список этих столбцов и затем применить к ним максимальное значение, но это не сработало. Я нашел numpy.amax (), но не смог заставить его работать.

Проблема 2: я должен использовать имена столбцов для определения этих столбцов, не могу использовать индекс позиции столбцов, таких как df2 [, 0: 2]

Обновление для проблемы 2 - Когда я сказал «использовать имена столбцов» - я имел в виду, что у меня есть список имен столбцов, который мне нужно использовать, например [date1, date2, date3]. Извините, если это не было ясно из моего поста.

Ответы [ 3 ]

0 голосов
/ 28 августа 2018

Вы можете использовать логическое индексирование через str.startswith:

date_cols = df2.columns[df2.columns.str.startswith('date')]
df2['max_date'] = df2[date_cols].max(1)

print(df2)

       date1      date2      date3   name   max_date
0 2015-10-05 2015-10-05 2015-07-05   john 2015-10-05
1 2015-01-05 2015-01-05 2015-11-05    tom 2015-11-05
2 2015-07-06 2015-07-06 2015-07-06  phill 2015-07-06
3 2015-10-06 2015-08-06 2015-11-06   nero 2015-11-06
4 2015-10-06 2015-09-06 2015-05-06    bob 2015-10-06
5 2015-12-08 2015-12-08 2015-05-08    rob 2015-12-08
0 голосов
/ 28 августа 2018

select_dtypes

Это работает для всех столбцов даты и времени независимо от соглашения об именах.

df2.assign(max_date=df2.select_dtypes('datetime').max(1))

       date1      date2      date3   name   max_date
0 2015-10-05 2015-10-05 2015-07-05   john 2015-10-05
1 2015-01-05 2015-01-05 2015-11-05    tom 2015-11-05
2 2015-07-06 2015-07-06 2015-07-06  phill 2015-07-06
3 2015-10-06 2015-08-06 2015-11-06   nero 2015-11-06
4 2015-10-06 2015-09-06 2015-05-06    bob 2015-10-06
5 2015-12-08 2015-12-08 2015-05-08    rob 2015-12-08
0 голосов
/ 28 августа 2018

Использование max с filter like

df2['max_date']=df2.filter(like='date',axis=1).max(1)
df2
Out[157]: 
       date1      date2      date3   name   max_date
0 2015-10-05 2015-10-05 2015-07-05   john 2015-10-05
1 2015-01-05 2015-01-05 2015-11-05    tom 2015-11-05
2 2015-07-06 2015-07-06 2015-07-06  phill 2015-07-06
3 2015-10-06 2015-08-06 2015-11-06   nero 2015-11-06
4 2015-10-06 2015-09-06 2015-05-06    bob 2015-10-06
5 2015-12-08 2015-12-08 2015-05-08    rob 2015-12-08
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...