Если оператор между двумя или более столбцами в кадре данных - PullRequest
0 голосов
/ 02 мая 2018

То, что я пытаюсь сделать, это сделать простое утверждение, которое говорит, что если столбец не равен = 'nan', то создать новый столбец в кадре данных и установить это значение для каждой строки.

ID1    ID2
Apple  nan
Orange nan
nan    Pear
nan    Grape

В идеале это бы выглядело так:

ID1    ID2    MasterID
Apple  nan    Apple
Orange nan    Orange
nan    Pear   Pear
nan    Grape  Grape

Я пытался использовать следующее:

df['MasterID'] = ''
df.loc[df['ID1'] != 'nan','MasterID'] = df['ID1']
df.loc[df['ID2'] != 'nan','MasterID'] = df['ID2']

Но то, что он делает, это просто устанавливает приоритет последнего оператора, чтобы отменить то, что создает вторая строка. То же самое, когда я использую оператор numpy where:

df['MasterID'] = np.where(df['ID1'] != 'nan',
                          df['ID1'],
                          df['ID2'])

Хотел бы также использовать кое-что, где я мог бы сделать это в будущем с 3+ столбцами. Цените любые указания.

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Вы можете использовать bfill

df['New']=df.bfill(1).iloc[:,0]
df
Out[165]: 
      ID1    ID2     New
0   Apple    NaN   Apple
1  Orange    NaN  Orange
2     NaN   Pear    Pear
3     NaN  Grape   Grape

Или df['New']=df.ID1.fillna(df.ID2)

0 голосов
/ 02 мая 2018

Сначала замените NaN с, а затем sum в строках:

df['MasterID'] = df.fillna('').sum(axis=1)

При необходимости укажите имена столбцов:

df['MasterID'] = df[['ID1','ID2']].fillna('').sum(axis=1)

print (df)
      ID1    ID2 MasterID
0   Apple    NaN    Apple
1  Orange    NaN   Orange
2     NaN   Pear     Pear
3     NaN  Grape    Grape
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...