擅长:python、mysql、java
<p>与<code>stack</code>一起:</p>
<pre><code>df["XYZ"] = df.stack().values
</code></pre>
<p>得到</p>
<pre><code>>>> df
X Y Z XYZ
0 NaN NaN ZVal1 ZVal1
1 NaN NaN ZVal2 ZVal2
2 XVal1 NaN NaN XVal1
3 NaN YVal1 NaN YVal1
</code></pre>
<p>因为您保证每行只有1个非NaN,并且默认情况下<code>stack</code>会删除NaN</p>
<hr/>
<p>使用花式索引的另一种方法:</p>
<pre><code>df["XYZ"] = df.to_numpy()[np.arange(len(df)),
df.columns.get_indexer(df.notna().idxmax(axis=1))]
</code></pre>
<p>对于每一行,它查看非NaN值的索引并选择它</p>