class Movie:
def __init__(self, title, imdb, critic, quote):
self.title = title
self.imdb = imdb
self.critic = critic
self.quote = quote
def mashup(self):
x =self.title + self.imdb + self.critic + self.quote
return self.x
df['concat'] = df.apply(Movie,axis=1)
我期望看到的结果是将每列串联起来作为数据框中的新列。
问题是 Movie 没有收到预期数量的参数,并且我没有调用 mashup 方法,但不确定出了什么问题。
TypeError: ("__init__() missing 3 required positional arguments: 'imdb', 'critic', and 'quote'", 'occurred at index 0')
最佳答案
一般来说,直接分配计算序列是清晰且高效的。如果您希望使用显式函数进行系列计算,则 pipe
您的数据框到您的函数:
df = pd.DataFrame(np.arange(15).reshape((5, 3)))
def summer(x):
return x[0] + x[1] + x[2]
df['sum_1'] = df[0] + df[1] + df[2]
df['sum_2'] = df.pipe(summer)
print(df)
0 1 2 sum_1 sum_2
0 0 1 2 3 3
1 3 4 5 12 12
2 6 7 8 21 21
3 9 10 11 30 30
4 12 13 14 39 39
通常不需要将单独的列传递给您的函数。 不推荐使用 apply
的 Python 级逐行循环。 :
df['sum_3'] = df.apply(lambda x: x[0] + x[1] + x[2], axis=1)
关于python - 如何使用 apply 将列作为参数传递给类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53695509/