python - 如何根据空值将一个行列值分配给另一行列
问题描述
我有一个数据框
Col1 Col2 Col3 Col4 Col5
A123 13500 2/03/19 0 NaN
B123 2000 3/04/19 0 Distinct
C123 500 8/09/19 1 Match
D123 100 11/01/19 1 NaN
E123 1350 2/03/19 2 NaN
F123 2000 3/04/19 2 Match
G123 500 8/09/19 3 Distinct
H123 100 11/01/19 3 NaN
我想遍历基于的行Col4
并相应地更新Col5(NaN)
行。
也就是说,当我选择Col4
为 0 的行时,我想Col5
根据其他行列值更新
Output:
Col1 Col2 Col3 Col4 Col5
A123 13500 2/03/19 0 **Distinct**
B123 2000 3/04/19 0 Distinct
C123 500 8/09/19 1 Match
D123 100 11/01/19 1 **Match**
E123 1350 2/03/19 2 **Match**
F123 2000 3/04/19 2 Match
G123 500 8/09/19 3 Distinct
H123 100 11/01/19 3 **Distinct**
解决方案
从您的逻辑来看,您似乎希望将 0,3 in 的值映射到 inCol4
中的“Distinct” Col5
,并将 1,2 的值映射到“Match”。您只想NaN
更新Col5
.
尝试:
df = pd.DataFrame({'Col4': [0,1,2,3,0,1,2,3],
'Col5': ["Distinct", "Match", "Match", "Distinct", np.nan, np.nan, np.nan, np.nan]})
mapper = {
0: "**Distinct**",
1: "**Match**",
2: "**Match**",
3: "**Distinct**"
}
df.loc[df.Col5.isna(), 'Col5'] = df[df.Col5.isna()]['Col4'].map(mapper)
你现在得到:
Col4 Col5
0 0 Distinct
1 1 Match
2 2 Match
3 3 Distinct
4 0 **Distinct**
5 1 **Match**
6 2 **Match**
7 3 **Distinct**
如果您改变对逻辑或替换值的想法,这使得以后更改映射变得容易。