回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有一个非常庞大的excel数据集,包含多个IF条件的多列。其中一列具有以下公式:</p>
<pre><code>=IF(A2532="Merlin",IF(LEFT(D2532,8)="RMZ.JPWK",RIGHT(D2532,LEN(D2532)-8),IF(LEFT(D2532,6)="RMZ.JP",RIGHT(D2532,LEN(D2532)-6),IF(LEFT(D2532,4)="RMZ.",RIGHT(D2532,LEN(D2532)-4),D2532))),IF(AND(A2532<>"Merlin",LEFT(D2532,4)="RMZ."),"",D2532))
</code></pre>
<p>数据帧示例如下:</p>
<pre><code>#Country Code
=================
Merlin 010566
Merlin RMZ.JP828802
Merlin RMZ.JP828804
Merlin RMZ.JP828806
Merlin RMZ.JPNS9002
</code></pre>
<p>上述条件很容易在excel中实现。条件的要点是:</p>
<pre><code> If Country is Merlin, then:
If first 8 characters of D2532 is RMZ.JPWK, then write first 8 characters of D2532
else if first 6 characters of D2532 is RMZ.JP, then write first 6 characters of D2532
else if first 4 characters of D2532 is RMZ., then write first 4 characters of D2532
If country is not Merlin then:
if first 4 characters of D2532 is RMZ., then write 'NAN'
</code></pre>
<p>预期输出数据帧:</p>
<pre><code>#Country Code Result
================================
Merlin RMZ.JPWK821517 821517
Merlin RMZ.JPWK14202 14202
Merlin RMZ.JPWK14324 14324
Merlin RMZ.JPWK4003175001 4003175001
Merlin RMZ.JP828802 828802
Merlin RMZ.JP828804 828804
Merlin RMZ.JP828806 828806
Merlin RMZ.02029182001 02029182001
Merlin RMZ.02031790001 02031790001
Merlin RMZ.02519593001 02519593001
Sorex RMZ.02519593001 NAN
</code></pre>
<p>我可以通过创建满足每个条件的多个列,然后使用if else循环来编写解决方案,但是由于数据集非常庞大,运行起来需要很长时间</p>
<p>它还增加了我清理数据帧的工作,因为为每个条件创建了多个列,而实际上并不是每次都进行计算</p>
<p>请注意,上面的数据帧只是一小部分,实际数据库包含100个列和10万行</p>
<p>我想要的解决方案是:</p>
<ol>
<li>消除了为每个条件创建新列的需要,并且仍然能够在单个表达式中对其求值</李>
</ol>
<p>-2.消除If循环的使用</p>