I like to select cells for processing by choosing column names contained in a different column. For clarity, input and output are given below. Column ‘a’ contains the column names for setting the value to None for each row. I tried to code as below but keep getting errors.
JavaScript
x
8
1
df1 = pd.DataFrame({'a': ['a1', 'a2', 'a4', 'a1'],
2
'a1': [1, 3, 1, 0],
3
'a2': ['9', '3', '1', '4'],
4
'a3': ['8', '5', '4', '6'],
5
'a4': ['8', '5', '3', '3']})
6
7
df2 = df1.apply(lambda x: x['a']=None, axis=1)
8
Input
JavaScript
1
6
1
a a1 a2 a3 a4
2
0 a1 1 9 8 8
3
1 a2 3 3 5 5
4
2 a3 1 1 4 3
5
3 a1 0 4 6 3
6
Output
JavaScript
1
6
1
a a1 a2 a3 a4
2
0 a1 None 9 4 9
3
1 a2 3 None 5 5
4
2 a4 1 1 5 None
5
3 a1 None 4 6 0
6
Advertisement
Answer
Check with mask
and numpy
boardcast
JavaScript
1
8
1
out = df1.mask(df1.a.values[:,None]==df1.columns.values,'None')
2
Out[80]:
3
a a1 a2 a3 a4
4
0 a1 None 9 8 8
5
1 a2 3 None 5 5
6
2 a4 1 1 4 None
7
3 a1 None 4 6 3
8
Or we try
JavaScript
1
4
1
m = np.equal.outer(df1.a.values,df1.columns.values)
2
3
out = df1.mask(m,'None')
4