Как изменить год даты в кадре данных панд при различных условиях? - PullRequest
1 голос
/ 27 марта 2019

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

    ID  Date    
1   3   2016-04-01  
2   3   2016-04-02  
3   3   2016-04-03  
4   3   2016-04-04  
5   3   2016-04-05  
6   3   2017-04-01  
7   3   2017-04-02  
8   3   2017-04-03  
9   3   2017-04-04  
10  3   2017-04-05
11  7   2016-04-01  
12  7   2016-04-02  
13  7   2016-04-03  
14  7   2016-04-04  
15  7   2016-04-05  
16  7   2017-04-01  
17  7   2017-04-02  
18  7   2017-04-03  
19  7   2017-04-04  
20  7   2017-04-05

Я хочу изменить год дат, учитывая два условия.Условиями являются значение идентификатора и год даты.Например, если ID = 3 и год 2016, я хочу изменить его на 2014

Ответы [ 3 ]

2 голосов
/ 27 марта 2019

Вы можете использовать что-то вроде этого:

def f(x):
  if x['ID'] == 3 and '2016' in x['Date']:
    return x['Date'].replace('2014','2016')
else:
  return x['Date']

df['new_column'] = df.apply(f, axis=1)

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

Если вы хотите использовать лямбда-функцию:

df['new_column'] = df.apply(lambda x: x['Date'].replace('2014', '2016') if x['ID'] == 3 and '2016' in x['Date'] else x['Date'], axis=1)
1 голос
/ 27 марта 2019

Аналогично, если ваши данные хранятся в виде объекта datetime, ваша соответствующая функция - x['date'] = x['date'].replace(2016), а ваше состояние - x['date'].year == 2014

После предыдущего ответа однострочная строка будет выглядеть так:

df['date'] = df.apply(lambda x: x['Date'].replace(2014) if x['ID'] == 3 and x['date'].year == 2016 else x['date'], axis=1)`

В общем, я бы рекомендовал работать с datetime для дат и времени.

0 голосов
/ 27 марта 2019
data['Date'] = data.apply(lambda x: x['Date'].replace('2016','2014') if (x['ID'] == 3 and "2016" in x['Date']) else x['Date'], axis=1)

Выход:

    ID  Date
0   3   2014-04-01
1   3   2014-04-02
2   3   2014-04-03
3   3   2014-04-04
4   3   2014-04-05
5   3   2017-04-01
6   3   2017-04-02
7   3   2017-04-03
8   3   2017-04-04
9   3   2017-04-05
10  7   2016-04-01
11  7   2016-04-02
12  7   2016-04-03
13  7   2016-04-04
14  7   2016-04-05
15  7   2017-04-01
16  7   2017-04-02
17  7   2017-04-03
18  7   2017-04-04
19  7   2017-04-05
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...