满足双条件时修改DataFrame的Level列值的正确方法求助
解决DataFrame条件修改列值并保留其余原始值的问题
问题场景
需要实现:当DataFrame中Type列为'Medium'且Level列为'level 1'时,将Level列值改为'level',同时保留其他行的原始Level值。
原始数据
import pandas as pd import numpy as np data = { 'Type': ['High', 'High', 'Medium', 'Low', 'Low'], 'Level': ['level 1', 'level 2', 'level 1', 'level 1', 'level 2'] } df = pd.DataFrame(data)
原代码问题分析
你之前使用的np.where写法中,第三个参数指定了固定值'No Level',这会导致所有不满足条件的行都被替换成这个值,而不是保留原始的Level数据。
正确实现方法
方法1:修正np.where参数
将np.where的第三个参数改为原始的df["Level"],这样不满足条件时就会保留原值:
df["Level"] = np.where( (df["Type"] == "Medium") & (df["Level"] == "level 1"), 'level', df["Level"] )
方法2:使用loc定位修改(更直观)
通过loc直接定位到满足条件的行和列,进行精准修改:
df.loc[(df["Type"] == "Medium") & (df["Level"] == "level 1"), "Level"] = "level"
最终结果
执行上述任意一种方法后,得到的DataFrame如下:
Type Level 0 High level 1 1 High level 2 2 Medium level 3 Low level 1 4 Low level 2
内容的提问来源于stack exchange,提问作者JackJack
相关产品推荐
相关产品推荐

