重写Python或计算列

重写Python或计算列,python,pandas,Python,Pandas,我正在创建一个新专栏。它将引用A列中的文本(测试3字符串条件),结果将是B列中的文本。我有这段代码,它可以工作,但不知道是否有更好的方法来完成这项任务。Psuedo代码应该是:如果“linemove”列包含这些字符串中的任何一个,则将结果表单带到“Home”列 melted.loc[(melted['linemove'] == 'bigger dog') | (melted['linemove'] == 'flipped, now dog') | (melted['linemove'] == '

我正在创建一个新专栏。它将引用A列中的文本(测试3字符串条件),结果将是B列中的文本。我有这段代码,它可以工作,但不知道是否有更好的方法来完成这项任务。Psuedo代码应该是:如果“linemove”列包含这些字符串中的任何一个,则将结果表单带到“Home”列

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
方法的优点是,您不必两次定位行(左侧和右侧)

不用担心,谢谢您的帮助。我喜欢这种方法。阅读起来容易一点不用担心,谢谢你的帮助。我喜欢这种方法。它更容易阅读我同意,我更喜欢选择方法。谢谢你的主意。我同意,我更喜欢选择法。谢谢你的主意。