为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 apply 将列作为参数传递给类

如何使用 apply 将列作为参数传递给类

翻翻过去那场雪 2021-09-11 18:25:18
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.xdf['concat'] = df.apply(Movie,axis=1)我希望看到的结果是将每一列串联为数据框中的新列。问题是 Movie 没有收到预期数量的参数,我没有调用 mashup 方法,但不确定出了什么问题。TypeError: ("__init__() missing 3 required positional arguments: 'imdb', 'critic', and 'quote'", 'occurred at index 0')
查看完整描述

2 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

你为什么要使用类来做到这一点?如果您的数据在熊猫数据框中,您可以简单地执行以下操作:

df['concat'] = df['title'] + df['imdb'] + df['critic'] + df['quote']


查看完整回答
反对 回复 2021-09-11
?
烙印99

TA贡献1829条经验 获得超13个赞

一般来说,直接分配计算序列是清晰有效的。如果您希望使用显式函数进行系列计算,那么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

通常不需要将单个列传递给您的函数。什么是不推荐的是通过一个Python级逐行循环apply:


df['sum_3'] = df.apply(lambda x: x[0] + x[1] + x[2], axis=1)


查看完整回答
反对 回复 2021-09-11
  • 2 回答
  • 0 关注
  • 170 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号