Python 如何基于布尔表达式和其他两列的关系在dataframe中创建列

Python 如何基于布尔表达式和其他两列的关系在dataframe中创建列,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据帧,df,带有列“a”、“b”和“c”。我想创建列“d”,每行上都有条件: if type(a) != str: df['d'] = df['a'] else: df['d'] = df['b']/df['c'] “a”中的某些值是字符串,而某些值不是字符串。您可以使用numpy.where 下面是使用apply的另一种方法: 我想你可能混淆了where中两种可能性的顺序,但我得到了我需要的:df['d']=np.wheredf['a'].applylambda x

我有一个数据帧,df,带有列“a”、“b”和“c”。我想创建列“d”,每行上都有条件:

if type(a) != str:
    df['d'] = df['a']
else:
    df['d'] = df['b']/df['c']
“a”中的某些值是字符串,而某些值不是字符串。

您可以使用numpy.where

下面是使用apply的另一种方法:


我想你可能混淆了where中两种可能性的顺序,但我得到了我需要的:df['d']=np.wheredf['a'].applylambda x:typex!=str,df['a'],df['b']/df['b']。谢谢。@slothish1您在评论中将b除以它自己^ ^^df['d']=np.wheredf['a'].applylambda x:typex!=str,df['a'],df['b']/df['c']完成@温:你将如何处理这个问题?
a_is_str = df['a'].apply(lambda x: s is not str)


df['d'] = np.where(a_is_str, df['a'], df['b']/df['c'])
def check_if_str(row):
    if isinstance(row['a'], str):
        return row['a']
    return row['b'] / row['c']

df['d'] = df.apply(check_if_str, axis=1)