apply
- это метод, который вы ищете.
df[['Col_C','Col_D']] = df['Col_B'].apply(lambda x: pd.Series(list(bin(x)[2:].zfill(2))))
делает свое дело.
Я протестировал его на 3000 строк, и он быстрее, чем метод цикла, который вы упомянули (0,5 секунды против 3 секунд).Но, как правило, скорость не будет намного выше, поскольку все равно необходимо применять функцию для каждой строки отдельно.
from time import time
start = time()
for i in range(0,len(df)):
df.loc[i,'Col_C'],df.loc[i,'Col_D'] = list( (bin(df.loc[i,'Col_B'])[2:].zfill(2) ) )
print(time() - start)
# 3.4339962005615234
start = time()
df[['Col_C','Col_D']] = df['Col_B'].apply(lambda x: pd.Series(list(bin(x)[2:].zfill(2))))
print(time() - start)
# 0.5619983673095703
Примечание. Я использую Python 3, например, bin(1)
возвращает '0b1'
итаким образом я использую bin(x)[2:]
, чтобы избавиться от '0b'
части.