python-3.x - 熊猫 if else 仅在特定行上
问题描述
我有一个熊猫数据框,如下所示。我想申请以下条件
仅对于 A = 2 的行,将列“C”、“D”更新为 -99。
我有一个像下面这样的函数,它将 C 和 D 的值更新为 -99。
def func(df):
for col in df.columns:
if ("C" in col) or ("D" in col):
df.loc[:,col] = -99
现在我只想调用该函数,如果 A = 2。我尝试了下面的代码,但它将 C 和 D 的所有行更新为 -99
import pandas as pd
import math
import sys
import re
data=[[0,1,0,0, 0],
[1,2,0,0,0],
[2,0,0,0,0],
[2,4,0,0,0],
[1,8,0,0,0],
[3,2, 0,0,0]]
df = pd.DataFrame(data,columns=['A','B','C', 'D','E'])
df
def func(df):
for col in df.columns:
if ("C" in col) or ("D" in col):
df.loc[:,col] = -99
if (df['A'] == 2).any():
func(df)
print(df)
我的预期输出:
A B C D E
0 0 1 0 0 0
1 1 2 0 0 0
2 2 0 -99 -99 0
3 2 4 -99 -99 0
4 1 8 0 0 0
5 3 2 0 0 0
解决方案
您可以通过过滤来做到这一点:
df.loc[df['A'] == 2, ['C', 'D']] = -99
这里过滤的第一项过滤行,我们过滤这些行,以便我们只选择列的值为 的'A'
行2
。C
我们通过名称列表(和D
)过滤列。然后我们分配-99
给这些项目。
对于给定的样本数据,我们得到:
>>> df = pd.DataFrame(data,columns=['A','B','C', 'D','E'])
>>> df
A B C D E
0 0 1 0 0 0
1 1 2 0 0 0
2 2 0 0 0 0
3 2 4 0 0 0
4 1 8 0 0 0
5 3 2 0 0 0
>>> df.loc[df['A'] == 2, ['C', 'D']] = -99
>>> df
A B C D E
0 0 1 0 0 0
1 1 2 0 0 0
2 2 0 -99 -99 0
3 2 4 -99 -99 0
4 1 8 0 0 0
5 3 2 0 0 0
推荐阅读
- python - 使用 python selenium 从 wordpress 输入中获取价值
- c# - 如何使用 Outlook 互操作删除 UserProperty?
- html - 网格项展开以跟随列之间的偏移
- php - ServiceEntityRepository 返回实体的特定字段和连接实体的特定字段
- continuous-integration - 由于 node-gyp,在 GitHub CI 上使用 yarn 安装依赖项失败
- ethereum - 如何与已部署的 ERC20(openzeppelin ERC20 合约)代币交互,将代币从用户地址 X 转移到地址 Y?
- java - springboot应用程序中的多杰克逊日期格式配置
- java - 从 Integer.parseInt() 获取“NumberFormatException”,可能来自误解
- installation - Visual Studio 2019 安装项目 - 包括 Access Database Engine Redistributable 2016/2010
- amazon-web-services - 仅在 CentOS 上安装 redis-cli