как передать столбцы в качестве аргументов в класс с помощью apply - PullRequest
0 голосов
/ 09 декабря 2018
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')

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Как правило, прямое присвоение вычисляемых рядов понятно и эффективно.Если вы хотите использовать явную функцию для последовательных вычислений, тогда 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)
0 голосов
/ 09 декабря 2018

Почему вы используете класс для этого?Если ваши данные находятся во фрейме данных Pandas, вы можете просто сделать:

df['concat'] = df['title'] + df['imdb'] + df['critic'] + df['quote']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...