根据另一列中的列名称处理列

Reg*_*hew 2 python dynamic multiple-columns pandas

我喜欢通过选择不同列中包含的列名称来选择要处理的单元格。为了清楚起见,下面给出了输入和输出。列“a”包含用于将每行的值设置为 None 的列名称。我尝试编写如下代码,但不断出现错误。

df1 = pd.DataFrame({'a': ['a1',  'a2',  'a4',  'a1'],
                       'a1': [1,  3,  1,  0],
                       'a2': ['9',  '3',  '1',  '4'],
                       'a3': ['8',  '5',  '4',  '6'],
                       'a4': ['8',  '5',  '3',  '3']})

df2 = df1.apply(lambda x: x['a']=None, axis=1)
Run Code Online (Sandbox Code Playgroud)

输入

    a   a1  a2  a3  a4 
0   a1  1   9   8   8
1   a2  3   3   5   5
2   a3  1   1   4   3
3   a1  0   4   6   3
Run Code Online (Sandbox Code Playgroud)

输出

    a   a1   a2   a3 a4
0   a1  None 9    4  9
1   a2  3    None 5  5
2   a4  1    1    5  None
3   a1  None 4    6  0
Run Code Online (Sandbox Code Playgroud)

WeN*_*Ben 5

检查masknumpy广播

out = df1.mask(df1.a.values[:,None]==df1.columns.values,'None')
Out[80]: 
    a    a1    a2 a3    a4
0  a1  None     9  8     8
1  a2     3  None  5     5
2  a4     1     1  4  None
3  a1  None     4  6     3
Run Code Online (Sandbox Code Playgroud)

或者我们尝试

m = np.equal.outer(df1.a.values,df1.columns.values)

out = df1.mask(m,'None')
Run Code Online (Sandbox Code Playgroud)