<p>我正在处理一个大型数据集,需要将某些列合并到一个列表中。问题是,所选列的数量取决于另一个键值,每个行的键值都不同</p>
<h2>示例:</h2>
<h3>原始数据集:</h3>
<pre><code>Key Col1 Col2 Col3 Col4 Col5 NonrelatedCols
1 a b c d e ...
3 r b x d c ...
2 k d q l w ...
0 w a c s w ...
</code></pre>
<h3>预期结果:</h3>
<pre><code>Key List NonrelatedCols
1 [a] ...
3 [r,b,x] ...
2 [k,d] ...
0 [] ...
</code></pre>
<p>主要的挑战在于代码的性能。遍历行,不是最佳方法,我正在寻找一种更有效的方法</p>
<p>我试图只选择目标列,然后使用<code>agg(list,axis=1)</code>函数。问题是,无法基于键值聚合列。似乎,我仍然需要对所有行执行迭代,然后删除组合列中多余的值</p>
<pre><code>Cols = ['Col1', 'Col2', 'Col3','Col4','Col5']
CombinedList = rawData[Cols].agg(list,axis=1)
for i in range(rawData.shape[0]):
CombinedList[i]=CombinedList[i][:rawData['Key'][i]]
</code></pre>
<p>总而言之,有没有简化代码的方法,这样我就不需要遍历所有的行了</p>