我有一个看起来像这样的DataFrame
exec ms tp lu ru 0 exec1 16.0 240.87 2.30 0.85 1 exec1 16.0 243.72 2.35 0.84 2 exec1 16.0 234.16 2.38 0.92 3 exec1 16.0 244.71 2.35 0.84 4 exec1 16.0 240.74 2.39 0.90 5 exec1 128.0 1686.78 2.09 0.69 6 exec1 128.0 1704.36 2.00 0.44 7 exec1 128.0 1686.45 2.07 0.60 8 exec1 128.0 1722.61 2.07 0.45 9 exec1 128.0 1726.15 2.08 0.50 10 exec1 1024.0 5754.92 2.23 0.93 11 exec1 1024.0 5740.71 2.24 0.93 12 exec1 1024.0 5751.58 2.24 0.96 13 exec1 1024.0 5819.63 2.23 0.92 14 exec1 1024.0 5797.03 2.22 0.96 15 exec1 8192.0 37833.45 1.91 3.87 16 exec1 8192.0 38154.95 2.00 3.87 17 exec1 8192.0 38178.19 2.02 3.85 18 exec1 8192.0 38152.86 1.95 3.84 19 exec1 8192.0 35209.98 1.80 3.65 20 exec1 16384.0 38109.76 1.81 3.84 21 exec1 16384.0 38059.07 1.76 3.90 22 exec1 16384.0 36683.24 1.54 3.71 23 exec1 16384.0 37908.00 1.73 3.85 24 exec1 16384.0 37014.79 1.71 3.75
,我想从 ms 中创建列,以获取 tp , lu 和 ru 中的数据它们作为层次结构列,并使用 exec 作为索引,如下所示:
lu ru tp exec 16.0 128.0 1024.0 8192.0 16384.0 16.0 128.0 1024.0 8192.0 16384.0 16.0 128.0 1024.0 8192.0 16384.0 exec1 2.30 2.09 2.23 1.91 1.81 0.85 0.69 0.93 3.87 3.84 240.87 1686.78 5754.92 37833.45 38109.76 exec1 2.35 2.00 2.24 2.00 1.76 0.84 0.44 0.93 3.87 3.90 243.72 1704.36 5740.71 38154.95 38059.07 exec1 2.38 2.07 2.24 2.02 1.54 0.92 0.60 0.96 3.85 3.71 234.16 1686.45 5751.58 38178.19 36683.24 exec1 2.35 2.07 2.23 1.95 1.73 0.84 0.45 0.92 3.84 3.85 244.71 1722.61 5819.63 38152.86 37908.00 exec1 2.39 2.08 2.22 1.80 1.71 0.90 0.50 0.96 3.65 3.75 240.74 1726.15 5797.03 35209.98 37014.79
我尝试使用pd.pivot_table,但它会创建不必要的 nans 。
答案 0 :(得分:0)
可能需要groupby
+ cumcount
创建一个附加密钥,然后进行pivot
转换,如果需要检查pivot,这里我使用unstack
,我个人认为这比官方文件解释得更好
df.assign(key=df.groupby(['exec','ms']).cumcount()).set_index(['exec','ms','key']).unstack([1])