为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

动漫人物 2022-09-20 17:55:40
我正在尝试根据两个现有列的条件创建一个新列,但是在使用“np.where”后出现错误,有没有其他方法可以实现这一点?输入:change1 change2yes     yesyes     nono      yesno      yes预期输出:change1 change2 change3yes      yes      okyes      no       not okno       yes      not okno       yes      not ok法典:import pandas as pdimport numpy as npdf1=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]
查看完整描述

3 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

使用数据帧.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


查看完整回答
反对 回复 2022-09-20
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

用于转换为二进制,然后检查每行:DataFrame.replaceall


df1['change3'] = np.where(df1.replace({'yes': 1, 'no': 0}).all(axis=1), 

                          'ok', 

                          'not ok')

或与 和 :replacesum


df1['change3'] = np.where(df1.replace({'yes': 1, 'no': 0}).sum(axis=1).gt(1), 

                          'ok', 

                          'not ok')

  change1 change2 change3

0     yes     yes      ok

1     yes      no  not ok

2      no     yes  not ok

3      no     yes  not ok


查看完整回答
反对 回复 2022-09-20
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

您可以使用:

df['change3'] = df.apply(lambda x: 'ok' if x['change1'] == x['change2'] else 'not ok', axis=1)

输出:

查看完整回答
反对 回复 2022-09-20
  • 3 回答
  • 0 关注
  • 182 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信