Pandas 将两列合并为一列并排除 NaN 值

Rah*_*Miz 4 python dataframe pandas

我有一个 5k x 2 列数据框,称为“两者”。我想通过将一列中的任何 NaN 值替换为相邻列的值来创建一个新的 5k x 1 DataFrame 或列(无关紧要)。

前任:

    Gains  Loss
0    NaN   NaN
1    NaN -0.17
2    NaN -0.13
3    NaN -0.75
4    NaN -0.17
5    NaN -0.99
6   1.06   NaN
7    NaN -1.29
8    NaN -0.42
9   0.14  NaN
Run Code Online (Sandbox Code Playgroud)

例如,我需要将第 1 行到第 5 行第一列中的 NaN 与第二列中同一行中的值交换,以获得以下形式的新 df:

    Change  
0     NaN  
1    -0.17 
2    -0.13  
3    -0.75 
4    -0.17  
5    -0.99  
6    1.06  
Run Code Online (Sandbox Code Playgroud)

我如何告诉 python 这样做?

Mar*_*anD 5

您可以NaN用零填充这些值,然后只需添加您的列:

\n\n
both["Change"] = both["Gains"].fillna(0) + both["Loss"].fillna(0)\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后 \xe2\x80\x94 如果你需要它 \xe2\x80\x94 你可以将结果零返回到NaNs:

\n\n
both["Change"].replace(0, np.nan, inplace=True)\n
Run Code Online (Sandbox Code Playgroud)\n\n

结果:

\n\n
\n
    Gains      Loss  Change\n0     NaN       NaN     NaN\n1     NaN     -0.17   -0.17\n2     NaN     -0.13   -0.13\n3     NaN     -0.75   -0.75\n4     NaN     -0.17   -0.17\n5     NaN     -0.99   -0.99\n6    1.06       NaN    1.06\n7     NaN     -1.29   -1.29\n8     NaN     -0.42   -0.42\n9    0.14       NaN    0.14\n
Run Code Online (Sandbox Code Playgroud)\n
\n\n

最后,如果你想删除原来的列,你可以删除它们:

\n\n
both.drop(columns=["Gains", "Loss"], inplace=True)\n
Run Code Online (Sandbox Code Playgroud)\n