应用带多个参数的函数来创建新的pandas列

rm5edbpk  于 2023-04-04  发布在  其他
关注(0)|答案(7)|浏览(120)

我想在pandas数据框中创建一个新列,方法是对两个现有列应用一个函数。在answer之后,我已经能够在只需要一个列作为参数时创建一个新列:

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
ozxc1zmp

ozxc1zmp1#

如果你可以重写你的函数,你可以使用@greenAfrican示例。但是如果你不想重写你的函数,你可以把它 Package 到apply内部的匿名函数中,像这样:

>>> def fxy(x, y):
...     return x * y

>>> df['newcolumn'] = df.apply(lambda x: fxy(x['A'], x['B']), axis=1)
>>> df
    A   B  newcolumn
0  10  20        200
1  20  30        600
2  30  10        300
qyuhtwio

qyuhtwio2#

或者,你可以使用numpy底层函数:

>>> import numpy as np
>>> df = pd.DataFrame({"A": [10,20,30], "B": [20, 30, 10]})
>>> df['new_column'] = np.multiply(df['A'], df['B'])
>>> df
    A   B  new_column
0  10  20         200
1  20  30         600
2  30  10         300

或矢量化任意函数一般情况下:

>>> def fx(x, y):
...     return x*y
...
>>> df['new_column'] = np.vectorize(fx)(df['A'], df['B'])
>>> df
    A   B  new_column
0  10  20         200
1  20  30         600
2  30  10         300
9cbw7uwe

9cbw7uwe3#

这解决了问题:

df['newcolumn'] = df.A * df.B

您还可以执行以下操作:

def fab(row):
  return row['A'] * row['B']

df['newcolumn'] = df.apply(fab, axis=1)
gg0vcinb

gg0vcinb4#

如果需要***一次创建多列***:
1.创建dataframe:

import pandas as pd
df = pd.DataFrame({"A": [10,20,30], "B": [20, 30, 10]})

1.创建函数:

def fab(row):                                                  
    return row['A'] * row['B'], row['A'] + row['B']

1.分配新列:

df['newcolumn'], df['newcolumn2'] = zip(*df.apply(fab, axis=1))
xzlaal3s

xzlaal3s5#

多一个dict样式的干净语法:

df["new_column"] = df.apply(lambda x: x["A"] * x["B"], axis = 1)

或者,

df["new_column"] = df["A"] * df["B"]
jum4pzuy

jum4pzuy6#

这将动态地给予你想要的结果。即使你有两个以上的参数,它也能工作

df['anothercolumn'] = df[['A', 'B']].apply(lambda x: fxy(*x), axis=1)
print(df)

    A   B  newcolumn  anothercolumn
0  10  20        100            200
1  20  30        400            600
2  30  10        900            300
dba5bblo

dba5bblo7#

答案集中在以dataframe的列作为输入的函数上。更一般地说,如果你想在一个有多个参数的函数上使用pandas .apply,其中一些可能不是列,那么你可以在.apply()调用中将它们指定为关键字参数:

def fxy(x: , y):
    return x * y

df['newcolumn'] = df.A.apply(fxy, y=df.B)
df['newcolumn1'] = df.A.apply(fxy, y=4)

相关问题