<p>一个选项是<code>concat</code>:</p>
<pre><code>pd.concat([pd.Series(x['cValues'], x['cNames'], name=idx)
for idx, x in df.iterrows()],
axis=1
).T.join(df.iloc[:,2:])
</code></pre>
<p>或数据帧结构:</p>
<pre><code>pd.DataFrame({idx: dict(zip(x['cNames'], x['cValues']) )
for idx, x in df.iterrows()
}).T.join(df.iloc[:,2:])
</code></pre>
<p>输出:</p>
<pre><code> a b c d number
0 1.0 2.0 3.0 NaN 10
1 55.0 66.0 NaN 77.0 20
</code></pre>
<hr/>
<p><strong>更新</strong>按运行时对样本数据进行性能排序</p>
<p><strong>数据帧</strong></p>
<pre><code>%%timeit
pd.DataFrame({idx: dict(zip(x['cNames'], x['cValues']) )
for idx, x in df.iterrows()
}).T.join(df.iloc[:,2:])
1.29 ms ± 36.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
</code></pre>
<p><strong>concat</strong>:</p>
<pre><code>%%timeit
pd.concat([pd.Series(x['cValues'], x['cNames'], name=idx)
for idx, x in df.iterrows()],
axis=1
).T.join(df.iloc[:,2:])
2.03 ms ± 86.2 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
</code></pre>
<p><strong>KJDII的新系列</strong></p>
<pre><code>%%timeit
df['series'] = df.apply(lambda x: dict(zip(x['cNames'], x['cValues'])), axis=1)
pd.concat([df['number'], df['series'].apply(pd.Series)], axis=1)
2.09 ms ± 65.2 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
</code></pre>
<p><strong>Scott的应用程序(pd.Series.explode)</strong></p>
<pre><code>%%timeit
df.apply(pd.Series.explode)\
.set_index(['number', 'cNames'], append=True)['cValues']\
.unstack()\
.reset_index()\
.drop('level_0', axis=1)
4.9 ms ± 135 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
</code></pre>
<p><strong>wwnde的集合索引。应用(分解)</strong></p>
<pre><code>%%timeit
g=df.set_index('number').apply(lambda x: x.explode()).reset_index()
g['cValues']=g['cValues'].astype(int)
pd.pivot_table(g, index=["number"],values=["cValues"],columns=["cNames"]).droplevel(0, axis=1).reset_index()
7.27 ms ± 162 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
</code></pre>
<p>塞利乌斯的双重爆炸</p>
<pre><code>%%timeit
df1 = df.explode('cNames').explode('cValues')
df1['cValues'] = pd.to_numeric(df1['cValues'])
df1.pivot_table(columns='cNames',index='number',values='cValues')
9.42 ms ± 189 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
</code></pre>