擅长:python、mysql、java
<p>我的建议是通过以下方式改变您的解决方案:</p>
<p>第一步:<code>df.set_index(['timestamp', 'ticker', 'source']).unstack([1, 2])</code>,
就像你一样。在</p>
<p>它将列保留为以下形状:</p>
<pre><code> PX_LAST PX_OPEN PX_CLOSE
ticker A B A B A B
source LSE LSE LSE LSE LSE LSE
</code></pre>
<p>(和<code>timestamp</code>作为索引)。在</p>
<p>第二步:<code>reorder_levels([1, 2, 0], axis=1)</code>,而不是你的2
<code>swaplevel</code>指令。在</p>
<p>它将列保留为:</p>
^{pr2}$
<p>最后一步是<code>sort_index(axis=1, level=[0,1], sort_remaining=False)</code></p>
<p>请注意,您只对<strong>级别0和1进行排序,因此最后一个级别的顺序是
保持不变(PX_LAST,PX_OPEN,PX_CLOSE)。在</p>
<p>所以整个脚本(即单个指令)是:</p>
<pre><code>df2 = df.set_index(['timestamp', 'ticker', 'source']).unstack([1, 2])\
.reorder_levels([1, 2, 0], axis=1)\
.sort_index(axis=1, level=[0,1], sort_remaining=False)
</code></pre>
<p>打印结果时,您将得到:</p>
^{4}$