gpt4 book ai didi

python - 使用 if else 逻辑应用函数修改多列

转载 作者:行者123 更新时间:2023-11-28 22:18:02 24 4
gpt4 key购买 nike

我正在尝试编写一个带有 if-else 逻辑的函数,它将修改我的数据框中的两列。但它不起作用。以下是我的功能

def get_comment_status(df):
if df['address'] == 'NY':
df['comment'] = 'call tomorrow'
df['selection_status'] = 'interview scheduled'
return df['comment']
return df['selection_status']
else:
df['comment'] = 'Dont call'
df['selection_status'] = 'application rejected'
return df['comment']
return df['selection_status']

然后执行函数为:

df[['comment', 'selection_status']] = df.apply(get_comment_status, axis = 1)

但是我遇到了错误。我究竟做错了什么 ?我的猜测可能是 df.apply() 语法错误

错误信息:

TypeError: 'str' object cannot be interpreted as an integer KeyError:('address', 'occurred at index 0')

示例数据框:

df = pd.DataFrame({'address': ['NY', 'CA', 'NJ', 'NY', 'WS', 'OR', 'OR'],
'name1': ['john', 'mayer', 'dylan', 'bob', 'mary', 'jake', 'rob'],
'name2': ['mayer', 'dylan', 'mayer', 'bob', 'bob', 'tim', 'ben'],
'comment': ['n/a', 'n/a', 'n/a', 'n/a', 'n/a', 'n/a', 'n/a'],
'score': [90, 8, 88, 72, 34, 95, 50],
'selection_status': ['inprogress', 'inprogress', 'inprogress', 'inprogress', 'inprogress', 'inprogress', 'inprogress']})

我也考虑过使用 lambda 函数,但它不起作用,因为我试图使用“=”为“comment”和“selection_status”列赋值

注意:我检查了this question标题相似,但不能解决我的问题。

最佳答案

您尝试做的事情与 Pandas 哲学不太一致。此外,apply 是一个非常低效的函数。你可能应该使用 Numpy where:

import numpy as np
df['comment'] = np.where(df['address'] == 'NY',
'call tomorrow', 'Dont call')
df['selection_status'] = np.where(df['address'] == 'NY',
'interview scheduled', 'application rejected')

或 bool 索引:

df.loc[df['address'] == 'NY', ['comment', 'selection_status']] \
= 'call tomorrow', 'interview scheduled'
df.loc[df['address'] != 'NY', ['comment', 'selection_status']] \
= 'Dont call', 'application rejected'

关于python - 使用 if else 逻辑应用函数修改多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50826754/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com