1
Я пытаюсь создать новый столбец в моем DataFrame.Использовать сумму нескольких столбцов pandas при сопоставлении функции
Я хочу, чтобы новый столбец был * b, если сумма нескольких других столбцов равна == 0, 1, если сумма равна == 1 и 0 в противном случае.
Число столбцов, которые я суммирую, является динамическим, так как это могут быть 3 столбца, которые я суммирую, или это может быть 100. У меня есть список этих имен столбцов (list_to_check), которые могут быть любой длины.
df = pd.DataFrame({'a': [1,2,3], 'b': [2,3,4], 'c':['dd','ee','ff'], 'd1':[5,0,1], 'd2':[5,0,1], 'dn':[5,0,1]})
list_to_check = ['d1','d2','dn']
def func(a,b,c):
if sum(c) == 0:
a*b
elif sum(c) == 1:
1
else:
0
df['new_column'] = np.vectorize(func)(df.a,df.b,df[list_to_check])
Было бы хорошо, если бы вы включили объяснение с вашим ответом, а не только код. –
Perfect. Я не знал о df.loc, и этот пример действительно заполнил довольно много пробелов, которые мне не хватало. Спасибо за вашу помощь! – Chris
приятно слушать @chris. Да, в пандах есть определенные странные углы индексации. (например, мне приходилось использовать 'slice (None)' более одного раза) – acushner