如何在Pandas中根据两个现有列的条件填充新列?

我正在尝试根据两个现有列的条件创建一个新列,但是在使用“np.where”后出现错误,有没有其他方法可以实现这一点?


输入:


change1 change2

yes     yes

yes     no

no      yes

no      yes


预期输出:


change1 change2 change3

yes      yes      ok

yes      no       not ok

no       yes      not ok

no       yes      not ok


法典:


import pandas as pd

import numpy as np




df1=pd.read_csv('test2.txt',sep='\t')

df1['change1'] = df1['change1'].astype(str)

df1['change2'] = df1['change2'].astype(str)



df['change3'] = np.where(df1['change1']=='yes' & df1['change2'] == 'yes', 'ok', 'not ok')


print(df1)


错误:


cannot compare a dtyped [object] array with a scalar of type [bool]


动漫人物
浏览 183回答 3
3回答

一只斗牛犬

使用数据帧.eq 和 DataFrame.all.这将帮助您改进代码的语法并避免错误。df['change3'] = np.where(df.eq('yes').all(axis=1), 'ok' , 'not ok')#if you need select columns#df['change3'] = np.where(df[['change1', 'change2']].eq('yes').all(axis=1),                          'ok' , 'not ok')没有数据帧。df['change3'] = np.where((df1['change1']=='yes') & (df1['change2'] == 'yes'),                           'ok', 'not ok')或df['change3'] = np.where(df1['change1'].eq('yes') & df1['change2'].eq('yes'),                           'ok', 'not ok')您也可以使用系列地图 / 系列替换df['change3'] = df.eq('yes').all(axis=1).map({True : 'ok' , False : 'not ok'}) #df['change3'] = df.eq('yes').all(axis=1).replace({True : 'ok' , False : 'not ok'})print(df)#   change1 change2 change3# 0     yes     yes      ok# 1     yes      no  not ok# 2      no     yes  not ok# 3      no     yes  not ok

吃鸡游戏

用于转换为二进制,然后检查每行:DataFrame.replacealldf1['change3'] = np.where(df1.replace({'yes': 1, 'no': 0}).all(axis=1),                           'ok',                           'not ok')或与 和 :replacesumdf1['change3'] = np.where(df1.replace({'yes': 1, 'no': 0}).sum(axis=1).gt(1),                           'ok',                           'not ok')  change1 change2 change30     yes     yes      ok1     yes      no  not ok2      no     yes  not ok3      no     yes  not ok

蓝山帝景

您可以使用:df['change3'] = df.apply(lambda x: 'ok' if x['change1'] == x['change2'] else 'not ok', axis=1)输出:
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python