回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p><strong>背景</strong></p>
<p>我有以下数据帧</p>
<pre><code>import pandas as pd
df = pd.DataFrame({'Result' : [['pos', '+', 'pos', 'positive'], ['neg', 'neg'], [], ['pos']],
'P_ID': [1,2,3,4],
'Gene' : [['kras', 'kras', 'kras', 'egfr'], ['brca', 'brca'], [], ['cd133']],
'N_ID' : ['A1', 'A2', 'A3', 'A4']
})
#rearrange columns
df = df[['P_ID', 'N_ID', 'Gene', 'Result']]
df
P_ID N_ID Gene Result
0 1 A1 [kras, kras, kras, egfr] [pos, +, pos, positive]
1 2 A2 [brca, brca] [neg, neg]
2 3 A3 [] []
3 4 A4 [cd133] [pos]
</code></pre>
<p>我使用以下取自<a href="https://stackoverflow.com/questions/56410811/unnest-explode-multiple-list-2-0">unnest (explode) multiple list 2.0</a>的代码</p>
<pre><code>df.set_index('P_ID').apply(lambda x: x.apply(pd.Series).stack()).ffill().reset_index().drop('level_1', 1)
</code></pre>
<p><strong>问题</strong></p>
<p>使用上面的代码,我接近我想要的。但是,因为第三行中的<code>Gene</code>和<code>Result</code>列是空列表<code>[]</code>,所以我得到了上面行的输出,如下所示:</p>
<pre><code> P_ID N_ID Gene Result
0 1 A1 kras pos
1 1 A1 kras +
2 1 A1 kras pos
3 1 A1 egfr positive
4 2 A2 brca neg
5 2 A2 brca neg
6 3 A3 brca neg
7 4 A4 cd133 pos
</code></pre>
<p>相反,我想得到下面的输出,其中下面的行<code>6 3 A3 [] []</code>反映了原始数据帧<code>df</code>,其中包含空列表</p>
<p><strong>所需输出</strong></p>
<pre><code> P_ID N_ID Gene Result
0 1 A1 kras pos
1 1 A1 kras +
2 1 A1 kras pos
3 1 A1 egfr positive
4 2 A2 brca neg
5 2 A2 brca neg
6 3 A3 [] []
7 4 A4 cd133 pos
</code></pre>
<p><strong>问题</p>
<p>如何获得所需的输出?你知道吗</p>