我想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)
Run Code Online (Sandbox Code Playgroud)
但是,当函数需要多个参数时,我无法弄清楚如何做同样的事情.例如,如何通过将列A和列B传递给下面的函数来创建新列?
def fxy(x, y):
return x * y
Run Code Online (Sandbox Code Playgroud)
Rom*_*kar 196
您可以使用@greenAfrican示例,如果您可以重写您的功能.但是如果你不想重写你的函数,可以将它包装到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
Run Code Online (Sandbox Code Playgroud)
alk*_*lko 123
或者,您可以使用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
Run Code Online (Sandbox Code Playgroud)
或者在一般情况下向量化任意函数:
>>> 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
Run Code Online (Sandbox Code Playgroud)
gre*_*can 34
这解决了这个问题:
df['newcolumn'] = df.A * df.B
Run Code Online (Sandbox Code Playgroud)
你也可以这样做:
def fab(row):
return row['A'] * row['B']
df['newcolumn'] = df.apply(fab, axis=1)
Run Code Online (Sandbox Code Playgroud)
tot*_*ico 19
如果您需要一次创建多个列:
创建数据框:
import pandas as pd
df = pd.DataFrame({"A": [10,20,30], "B": [20, 30, 10]})
Run Code Online (Sandbox Code Playgroud)创建功能:
def fab(row):
return row['A'] * row['B'], row['A'] + row['B']
Run Code Online (Sandbox Code Playgroud)分配新列:
df['newcolumn'], df['newcolumn2'] = zip(*df.apply(fab, axis=1))
Run Code Online (Sandbox Code Playgroud)Sur*_*rya 13
还有一个dict风格的干净语法:
df["new_column"] = df.apply(lambda x: x["A"] * x["B"], axis = 1)
Run Code Online (Sandbox Code Playgroud)
要么,
df["new_column"] = df["A"] * df["B"]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
153869 次 |
| 最近记录: |