首页 > 解决方案 > 如何根据空值将一个行列值分配给另一行列

问题描述

我有一个数据框


    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**

标签: pythonpython-3.xpandas

解决方案


从您的逻辑来看,您似乎希望将 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**

如果您改变对逻辑或替换值的想法,这使得以后更改映射变得容易。


推荐阅读