我有一个类似于下图的表-这是我手动添加的最后一个表,用于说明所需的结果
Image of tablesetup
为breed创建一列,合并列p1-p3,其中如果p1_dog为真,则添加p1值,如果p1_dog为假,但p2_dog为真,则添加p2值,如果为假,则查看p3_dog,如果为真,则添加p3值,否则打印-“不是狗”。
我试过使用for循环,也试过使用np.select。也许np.where应该工作,但不知道如何工作
breeds = []
for row in df_copy:
if ['p1_dog']:
breeds.append(df_copy['p1'])
elif ['p2_dog']:
breeds.append(df_copy['p2'])
elif ['p3_dog']:
breeds.append(df_copy['p3'])
else:
breeds.append('not a dog')
这只给予了每个存储中的值的完整列表
使用np.select,我在这里找到pandas if else conditions on multiple columns
这会给我一个布尔值列表
df_copy['breed'] = np.select([df_copy.p1_dog == True , df_copy.p2_dog == True], [df_copy.p1_dog, df_copy.p2_dog], default=df_copy.p3_dog)
1条答案
按热度按时间p8h8hvxi1#
肯定不是最漂亮的,也不是很好的维护,但在这种情况下,它会工作:
基本上就是链接
np.where()
,如果第1列的条件为True,则输出p1名称,如果为False,则检查下一个布尔列,依此类推。输出:
另外,请将您的 Dataframe 作为原始文本而不是图像发布。我不得不逐字复制 Dataframe ,有些名称甚至被切断。