python-3.x - Python:更新数据框中的值
问题描述
我有一个包含 1000 条记录的数据框,其中 Group= ["India","Germany","China",....]。
我正在更新两列(大约 200 条记录,其中 Group == 'India'):New_Operator、Level
前两行代码正在更新“New Operator”和“Level”的记录。
问题是:第3 行和第 4 行代码正在替换之前更新的代码(前两行):
新操作员=> 以前更新为“印度”=> 替换为“本地”
Level=> 之前更新为“L1”=> 被替换为“Non L1”
df.loc[(df.Group == 'India') & ((df.Circle == 'Andhra Pradesh') | (df.Circle == 'Chennai') | (df.Circle == 'Delhi') | (df.Circle == 'Gujrat') | (df.Circle == 'Karnataka') | (df.Circle == 'Tamil Nadu')) , 'New_Operator'] = 'India'
df.loc[(df.Group == 'India') & ((df.Circle == 'Andhra Pradesh') | (df.Circle == 'Chennai') | (df.Circle == 'Delhi') | (df.Circle == 'Gujrat') | (df.Circle == 'Karnataka') | (df.Circle == 'Tamil Nadu')) , 'Level'] = 'L1'
print(df)
df.loc[(df.Group == 'India') & ((df.Circle != 'Andhra Pradesh') | (df.Circle != 'Chennai') | (df.Circle != 'Delhi') | (df.Circle != 'Gujrat') | (df.Circle != 'Karnataka') | (df.Circle != 'Tamil Nadu')) , 'New_Operator'] = 'Local'
df.loc[(df.Group == 'India') & ((df.Circle != 'Andhra Pradesh') | (df.Circle != 'Chennai') | (df.Circle != 'Delhi') | (df.Circle != 'Gujrat') | (df.Circle != 'Karnataka') | (df.Circle != 'Tamil Nadu')) , 'Level'] = 'Non L1'
print(df)
我希望根据特定的“Circle”(如代码中所述)在 Group == 'India' & 处更新输出。是否有更新值而不替换先前更新的值的解决方案?
解决方案
您的布尔表达式不是唯一的
(df.Group == 'India') & ((df.Circle == 'Andhra Pradesh') |
(df.Circle == 'Chennai') |
(df.Circle == 'Delhi') ...)
如果 df.Circle 等于 'Andhra Pradesh' 并且还:
(df.Group == 'India') & ((df.Circle != 'Andhra Pradesh') |
(df.Circle != 'Chennai') | ...)
如果 df.Circle 等于 'Andhra Pradesh',则计算结果为真,因为 OR 条件对除 df.Circle != 'Andhra Pradesh' 之外的所有条件都为真,因此总体返回 True。
您需要将第二组条件更改为 & ,如下所示:
(df.Group == 'India') & ((df.Circle != 'Andhra Pradesh') &
(df.Circle != 'Chennai') & ...)
我也建议使用
df.Circle.isin(['Andhra Pradesh','Chennai', ... ])
和
~df.Circle.isin(['Andhra Pradesh','Chennai', ... ])
因为在这种情况下,这些方法可能更容易正确
推荐阅读
- python - Scikit-learn TransformerMixin:“numpy.ndarray”对象没有属性“fit”
- php - Laravel:当验证失败时,可能有 {{ old('file') }} 值吗?如果是这样,怎么做?
- salt-stack - 将主机 IP 地址传递给 cmd.run 和 ini 文件
- r - 从没有 OAuth 令牌的公共 Google Drive 文件夹下载光栅文件
- macos - gfortran 是否可以使用 MOLD 进行分配?
- r - 如果在闪亮的反应
- asynchronous - 从屏幕返回数据并将其添加到流中
- google-apps-script - 将导入 json 转换为使用谷歌表格中的数组公式
- azure-functions - python azure 函数 v2 msiauthentication
- c# - 可以接收委托并在每个委托中每 N 次调用一次的对象