Как записать значение из столбца фрейма данных в другой столбец на основе условия?

#python #pandas #dataframe

Вопрос:

У меня здесь плохо получается, когда я пытаюсь понять, как установить столбец на основе условия. В принципе, я хочу скопировать значение из столбца «Клиент» в строки столбца «Ссылка на вызов», если строка отличается от «Предприятие» и «Клиент».

Вот код, который я пытаюсь:

 import numpy as np

df_OCB['Call Ref'] = np.select([
    np.logical_and(
        df_OCB['Call Ref'] != 'Enterprise', 
        df_OCB['Call Ref'] != 'Client'
    )], 
    df_OCB['Costomer'],
    default=''
)
 

Кто-нибудь знает решение?

Ответ №1:

Вы пробовали с np.where() ?

df_OCB['Call Ref'] = np.where((df_OCB['Call Ref'] != 'Enterprise') amp; (df_OCB['Call Ref'] != 'Client'), df_OCB['Customer'],'')

Ответ №2:

Не уверен, что это то, что вы действительно хотите сделать, потому что вы не привели пример своих фреймов входных и выходных данных, но, насколько я понимаю, я сделал игрушечный пример:

 import pandas as pd
import numpy as np



df = pd.DataFrame([['A','Enterprise'],
                   ['B','Client'],
                   ['C','Client'],
                   ['D','Something else'],
                   ['E','Enterprise']], columns=['Client','Call Ref'])

Output:

  Client    Call Ref
0   A     Enterprise
1   B     Client
2   C     Client
3   D     Something else
4   E     Enterprise
 

Здесь вы применяете логическую маску: (df['Call Ref'] != 'Enterprise') amp; (df['Call Ref'] != 'Client')

подобный этому:

 df['Call Ref'][(df['Call Ref'] != 'Enterprise') amp; (df['Call Ref'] != 'Client')] = df['Client'][(df['Call Ref'] != 'Enterprise') amp; (df['Call Ref'] != 'Client')]

Output:

    Client  Call Ref
0    A     Enterprise
1    B     Client
2    C     Client
3    D     D
4    E     Enterprise
 

Если вы предоставите больше информации о нужном вам выходном кадре данных, я могу привести вам более краткий пример, надеюсь, это помогло.