python - 在特定条件下替换其他列中数据框中的项目值

标签 python pandas

我有一个像这样的 pandas 数据框:

dx1      dx2    dx3     dx4     dxpoa1  dxpoa2  dxpoa3  dxpoa4
25041   40391                   Y       E       
25041   40391   25081           N       W       U       
25041   40391   42822   99681   1       N       Y       Y 

有两组列:dx 和 dxpoa。根据 dxpoa 中的某些值,我必须保留 dx 中的值或丢弃它。对于 dx 中的每个值,该行中相应的 dxpoa 中都有一个值。例如:如果 dxpoa = ['Y'或 'W' 或 '1' 或 'E'] 则将 dx 值保留在相应行中,否则丢弃它或用 0 填充它。像 dxpoa1 一样,第一行中是 'Y'因此 dx1 将保持原样。但第二行的 dxpoa1 为“N”,因此第二行的 dx1 对应的值将变为 0。

最佳答案

给定一个像这样构建的数据框:

import pandas as pd
import numpy as np
df = pd.DataFrame({'dx1':[25041,25041,25041],
                   'dx2':[40391,40391,40391],
                   'dx3':[np.nan,25081,42822],
                   'dx4':[np.nan,np.nan,99681],
                   'dxpoa1':['Y','N','1'],
                   'dxpoa2':['E','W','N'],
                   'dxpoa3':[np.nan,'U','Y'],
                   'dxpoa4':[np.nan,np.nan,'Y']})

这给出:

    dx1     dx2     dx3     dx4    dxpoa1   dxpoa2  dxpoa3  dxpoa4
0   25041   40391   NaN     NaN     Y       E       NaN     NaN
1   25041   40391   25081   NaN     N       W       U       NaN
2   25041   40391   42822   99681   1       N       Y       Y

定义一个实现替换规则的函数。当引用列中的值不是“Y”、“W”、“1”或“E”时,这会将目标列替换为零,正如我从您的描述中了解到的:

def subfunc(row,col_reference=None,col_target=None):
    if not row[col_reference] in ['Y','W','1','E']:
        row[col_target] = 0
    return row

然后对每行应用 subfunc 来迭代列名称:

for colname in df.columns:
    if 'dxpoa' in colname:
        colid = colname.split('dxpoa')[1]
        df = df.apply(subfunc,axis=1,col_reference=colname,col_target='dx'+colid)

数据框中的结果

    dx1     dx2     dx3     dx4     dxpoa1  dxpoa2  dxpoa3  dxpoa4
0   25041   40391   0       0       Y       E       NaN     NaN
1   0       40391   0       0       N       W       U       NaN
2   25041   0       42822   99681   1       N       Y       Y

关于python - 在特定条件下替换其他列中数据框中的项目值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33175806/

相关文章:

python - 汇总列表的对象

python - python中的 "list name not defined"错误是什么意思?

python - 需要以0.25的倍数四舍五入

python - Ctypes将float传递给函数返回随机数

python - 将 CSV 的前 n 行读入字典

python - 从 DataFrame 行中选择变量组合

python - 我正在尝试减去这两个数据帧,但出现了 NaNs 而不是值

python - Pandas fillna() 按特定顺序排列

python - 按系列共享索引划分 Dataframe

python - 更改DataFrame中某行的增量值