как обновить столбцы данных в зависимости от условия с помощью pipe () и apply () - PullRequest
1 голос
/ 17 апреля 2020

Я относительно новичок в библиотеке pandas и застрял в двух функциях pipe () и apply (). Я пытаюсь найти разницу между двумя функциями, но не могу найти какой-либо ресурс, который объясняет легко понятным способом.

Кроме того, у меня есть эта функция, которую я создал для использования с pipe () и apply (), но всякий раз, когда я хочу добавить '2' к столбцу, он работает нормально, но, поскольку я заменяю его условным, в противном случае он выдает ошибку:

ValueError: Истинное значение DataFrame неоднозначно. Используйте a.empty, a.bool (), a.item (), a.any () или a.all ()

    def lol(e1):
        if(e1 > 3):
           return "High"
        else:
           return "Low"


data = {'Name': ['Giggs', 'Tom', 'Dick', 'Harry', 'Jack', 'Jill', 'Scholes', 'Martial', 'Rashford', 'Pogba'],
                'Age': [23,21,24,21,20,10,23,45,22,35],
                'Rating': [4.23, 3.21, 2.10, 1.91, 4.32, 6.32, 4.19, 2.09, 1.09, 3.33]}

df = pd.DataFrame(data, index=['A1','A2','A3','A4','A5','A6','A7','A8','A9','A10'])

print(df[['Rating', 'Age']].pipe(lol))
print(df[['Rating', 'Age']].apply(lol,axis=1))

Я не могу добиться какого-либо прогресса. Пожалуйста помоги. Спасибо

1 Ответ

1 голос
/ 17 апреля 2020

В вашем случае вам не нужно использовать трубу. Вы должны использовать apply.

df.Rating.apply(lol)

A1     High
A2     High
A3      Low
A4      Low
A5     High
A6     High
A7     High
A8      Low
A9      Low
A10    High
Name: Rating, dtype: object

Канал используется только тогда, когда вы хотите сослаться на весь DataFrame, например:

df.pipe(lambda x: pd.concat([x,x]))

Это объединит DataFrame с самим собой.

Если вы передаете несколько столбцов с помощью apply, переданное значение является последовательностью Вы можете получить доступ к элементу через его индекс.

Например, если вы хотите сделать это:

df[['Rating', 'Age']].apply(lol,axis=1)

Вам нужно изменить свою функцию на:

def lol(e1):
    if(e1.Rating > 3):
       return "High"
    else:
       return "Low"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...