Выбор одного из двух столбцов данных в качестве ввода в новый столбец - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть фрейм данных (df), который выглядит как голова:

             DATE   BBG  FLAG  DATE_DIFF   NEW_DATE    
0      2014-03-04  1333     1      -31.0 2014-04-03 
1      2014-04-04  1333     0      -91.0 2014-04-04 
2      2014-07-04  1333     1      -31.0 2014-04-07 
3      2014-08-04  1333     1      -31.0 2014-04-08 
4      2014-09-04  1333     1      -30.0 2014-04-09 
5      2014-10-04  1333     1      -31.0 2014-04-10 
6      2014-11-04  1333     1      204.0 2014-04-11
7      2014-04-14  1333     0       -1.0 2014-04-14 
8      2014-04-15  1333     0       -1.0 2014-04-15 
9      2014-04-16  1333     0       -1.0 2014-04-16 

Я пытаюсь создать новый столбец с именем PICKED, который выбирает дату из столбца DATE или NEW_DATE на основании следующего:

Если FLAG = 1, тогда, если NEW_DATE является действительной датой, тогда выберите NEW_DATE, в противном случае выберите ДАТУ.

Ожидаемый результат будет выглядеть так:

             DATE   BBG   FLAG  DATE_DIFF   NEW_DATE     PICKED
0      2014-03-04  1333      1      -31.0 2014-04-03 2014-04-03
1      2014-04-04  1333      0      -91.0 2014-04-04 2014-04-04
2      2014-07-04  1333      1      -31.0 2014-04-07 2014-04-07
3      2014-08-04  1333      1      -31.0 2014-04-08 2014-04-08
4      2014-09-04  1333      1      -30.0 2014-04-09 2014-04-09
5      2014-10-04  1333      1      -31.0 2014-04-10 2014-04-10
6      2014-11-04  1333      1      204.0 2014-04-11 2014-04-11
7      2014-04-14  1333      0       -1.0 2014-04-14 2014-04-14
8      2014-04-15  1333      0       -1.0 2014-04-15 2014-04-15
9      2014-04-16  1333      0       -1.0 2014-04-16 2014-04-16

Я пытаюсь использовать следующее для достижения этой цели:

df['PICKED'] = np.where(df['FLAG'] == 1, df.NEW_DATE.fillna(df.DATE, inplace=True), df['DATE'])

Но я получаю следующее:

             DATE   BBG   FLAG  DATE_DIFF   NEW_DATE     PICKED
0      2014-03-04  1333      1      -31.0 2014-04-03        NaT
1      2014-04-04  1333      0      -91.0 2014-04-04 2014-04-04
2      2014-07-04  1333      1      -31.0 2014-04-07        NaT
3      2014-08-04  1333      1      -31.0 2014-04-08        NaT
4      2014-09-04  1333      1      -30.0 2014-04-09        NaT
5      2014-10-04  1333      1      -31.0 2014-04-10        NaT
6      2014-11-04  1333      1      204.0 2014-04-11        NaT
7      2014-04-14  1333      0       -1.0 2014-04-14 2014-04-14
8      2014-04-15  1333      0       -1.0 2014-04-15 2014-04-15
9      2014-04-16  1333      0       -1.0 2014-04-16 2014-04-16

Может кто-нибудь сообщить мне, где я сделал неправильно, пожалуйста.

Спасибо

1 Ответ

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

Вы были почти там. Использование -

df['PICKED'] = np.where(df['FLAG'] == 1, df.NEW_DATE.fillna(df.DATE), df['DATE'])

выход

    DATE    BBG FLAG    DATE_DIFF   NEW_DATE    PICKED
0   2014-03-04  1333    1   -31.0   2014-04-03  2014-04-03
1   2014-04-04  1333    0   -91.0   2014-04-04  2014-04-04
2   2014-07-04  1333    1   -31.0   2014-04-07  2014-04-07
3   2014-08-04  1333    1   -31.0   2014-04-08  2014-04-08
4   2014-09-04  1333    1   -30.0   2014-04-09  2014-04-09
5   2014-10-04  1333    1   -31.0   2014-04-10  2014-04-10
6   2014-11-04  1333    1   204.0   2014-04-11  2014-04-11
7   2014-04-14  1333    0   -1.0    2014-04-14  2014-04-14
8   2014-04-15  1333    0   -1.0    2014-04-15  2014-04-15
9   2014-04-16  1333    0   -1.0    2014-04-16  2014-04-16

Объяснение

Использование параметра inplace изменяет непосредственно df. Хорошо, если вы используете fillna(), как вы использовали в строке ранее, а затем используете df.NEW_DATE непосредственно в np.where()

Но для того, чтобы вы использовали fillna(), нужно что-то вернуть np.where. Указание inplace=True возвращает None, но изменяет df напрямую.

В этом случае, как видно, вам нужно было что-то вернуть для параметра np.where() и, следовательно, удаление inplace=True (по умолчанию inplace=False) дает вам то, что вам нужно.

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