重写Python或计算列
我正在创建一个新专栏。它将引用A列中的文本(测试3字符串条件),结果将是B列中的文本。我有这段代码,它可以工作,但不知道是否有更好的方法来完成这项任务。Psuedo代码应该是:如果“linemove”列包含这些字符串中的任何一个,则将结果表单带到“Home”列重写Python或计算列,python,pandas,Python,Pandas,我正在创建一个新专栏。它将引用A列中的文本(测试3字符串条件),结果将是B列中的文本。我有这段代码,它可以工作,但不知道是否有更好的方法来完成这项任务。Psuedo代码应该是:如果“linemove”列包含这些字符串中的任何一个,则将结果表单带到“Home”列 melted.loc[(melted['linemove'] == 'bigger dog') | (melted['linemove'] == 'flipped, now dog') | (melted['linemove'] == '
melted.loc[(melted['linemove'] == 'bigger dog') | (melted['linemove'] == 'flipped, now dog') | (melted['linemove'] == 'smaller favorite'), 'betOn'] = melted['Home']
melted.loc[(melted['linemove'] == 'smaller dog') | (melted['linemove'] == 'flipped, now favorite') | (melted['linemove'] == 'bigger favorite'), 'betOn'] = melted['Road']
我认为很难缩短
或,因为最终这就是您试图实现的逻辑
您可以通过定义一个布尔输出数组,然后使用该数组设置值,使其更具可读性,例如
my_condition = melted[ (melted['linemove'] == 'bigger dog') | (melted['linemove'] == 'flipped, now dog') | (melted['linemove'] == 'smaller favorite') ]
melted.loc[ my_condition, 'betOn' ] = melted.loc[ my_condition, 'Home' ]
并给my_条件
起一个有意义的名字(我真的很难理解你的条件的上下文才能很好地命名!)。我认为很难缩短或
,因为最终这就是你试图实现的逻辑
您可以通过定义一个布尔输出数组,然后使用该数组设置值,使其更具可读性,例如
my_condition = melted[ (melted['linemove'] == 'bigger dog') | (melted['linemove'] == 'flipped, now dog') | (melted['linemove'] == 'smaller favorite') ]
melted.loc[ my_condition, 'betOn' ] = melted.loc[ my_condition, 'Home' ]
并给my_条件
起一个有意义的名字(我真的很难理解你的条件的上下文才能给它起个好名字!)。另一种方法是使用np。选择和.isin
方法
import numpy as np
melted['betOn'] = np.select(
[ (melted['linemove'].isin(['bigger dog','flipped, now dog','smaller favorite']),
(melted['linemove'].isin(['smaller dog','flipped, now favorite','bigger favorite']),
[ melted['Home'], # what to use when condition1 is true
melted['Road'] ], # what to use when condition2 is true
default = melted['betOn'])
因为你只有两个条件,你也可以简单地做
melted.loc[melted['linemove'].isin(['smaller dog','flipped, now favorite','bigger favorite']), 'betOn'] = melted.loc[melted['linemove'].isin(['smaller dog','flipped, now favorite','bigger favorite']), 'Home']
melted.loc[melted['linemove'].isin(['smaller dog','flipped, now favorite','bigger favorite']), 'betOn'] = melted.loc[melted['linemove'].isin(['smaller dog','flipped, now favorite','bigger favorite']), 'Home']
np.select
方法的优点是,您不必两次定位行(左侧和右侧)另一种方法是使用np.select
和.isin
方法
import numpy as np
melted['betOn'] = np.select(
[ (melted['linemove'].isin(['bigger dog','flipped, now dog','smaller favorite']),
(melted['linemove'].isin(['smaller dog','flipped, now favorite','bigger favorite']),
[ melted['Home'], # what to use when condition1 is true
melted['Road'] ], # what to use when condition2 is true
default = melted['betOn'])
因为你只有两个条件,你也可以简单地做
melted.loc[melted['linemove'].isin(['smaller dog','flipped, now favorite','bigger favorite']), 'betOn'] = melted.loc[melted['linemove'].isin(['smaller dog','flipped, now favorite','bigger favorite']), 'Home']
melted.loc[melted['linemove'].isin(['smaller dog','flipped, now favorite','bigger favorite']), 'betOn'] = melted.loc[melted['linemove'].isin(['smaller dog','flipped, now favorite','bigger favorite']), 'Home']
np.select
方法的优点是,您不必两次定位行(左侧和右侧)不用担心,谢谢您的帮助。我喜欢这种方法。阅读起来容易一点不用担心,谢谢你的帮助。我喜欢这种方法。它更容易阅读我同意,我更喜欢选择方法。谢谢你的主意。我同意,我更喜欢选择法。谢谢你的主意。