<p>给定这样构建的数据帧:</p>
<pre><code>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']})
</code></pre>
<p>它给出:</p>
<pre><code> 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
</code></pre>
<p>定义一个实现替换规则的函数。当引用列中的值不是“Y”、“W”、“1”或“E”时,这将用零替换目标列,正如我从您的描述中了解到的:</p>
<pre><code>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
</code></pre>
<p>然后对每行应用subfunc来迭代列名:</p>
<pre><code>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)
</code></pre>
<p>数据帧中的结果</p>
<pre><code> 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
</code></pre>