#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
Если вы предоставите больше информации о нужном вам выходном кадре данных, я могу привести вам более краткий пример, надеюсь, это помогло.