Я хочу создать новый столбец во pandas
фрейме данных, применив функцию к двум существующим столбцам. После этого ответа я смог создать новый столбец, когда мне нужен только один столбец в качестве аргумента:
import pandas as pd
df = pd.DataFrame({"A": [10,20,30], "B": [20, 30, 10]})
def fx(x):
return x * x
print(df)
df['newcolumn'] = df.A.apply(fx)
print(df)
Однако я не могу понять, как сделать то же самое, когда функция требует нескольких аргументов. Например, как мне создать новый столбец, передав столбец A и столбец B в функцию ниже?
def fxy(x, y):
return x * y
np.vectorize()
удивительно быстро. Спасибо.np.vectorize
не работает. Причина в том, что один из столбцов имеет типpandas._libs.tslibs.timestamps.Timestamp
, который превращается в типnumpy.datetime64
посредством векторизации. Эти два типа не являются взаимозаменяемыми, что приводит к плохому поведению функции. Есть предложения по этому поводу? (За исключением того,.apply
что этого, по-видимому, следует избегать)Вы можете пойти с примером @greenAfrican, если вы можете переписать свою функцию. Но если вы не хотите переписывать свою функцию, вы можете обернуть ее в анонимную функцию внутри apply, например:
источник
Это решает проблему:
Вы также можете сделать:
источник
Если вам нужно создать несколько столбцов одновременно :
Создайте фрейм данных:
Создайте функцию:
Назначьте новые столбцы:
источник
Еще один чистый синтаксис в стиле dict:
или,
источник