gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 21:30:18 27 4
gpt4 key购买 nike

我正在尝试根据两个现有列的条件创建一个新列,但在使用“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]

最佳答案

使用DataFrame.eqDataFrame.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')

没有DataFrame.all

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')

您还可以使用 Series.map/Series.replace

 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

关于python - 如何根据 Pandas 中两个现有列的条件填充新列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60953535/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com