【发布时间】:2016-11-10 17:13:06
【问题描述】:
我有一个pandas.DataFrame,其中包含数值、日期值和文本值。像这样的:
Strike StrikeCell Expiration ExpirationCell CellContents
0 60.0 \n <div class="cell row-header strike itm" ... 2016-07-15 \n <div class="cell col-header expiration">... \n <div class="cell option" strike="60.0" m...
1 60.0 \n <div class="cell row-header strike itm" ... 2017-01-20 \n <div class="cell col-header expiration">... \n <div class="cell option" strike="60.0" m...
2 60.0 \n <div class="cell row-header strike itm" ... 2018-01-19 \n <div class="cell col-header expiration">... \n <div class="cell option" strike="60.0"
13 70.0 \n <div class="cell row-header strike itm" ... 2017-01-20 \n <div class="cell col-header expiration">... \n <div class="cell option" strike="70.0" m...
15 70.0 \n <div class="cell row-header strike itm" ... 2018-01-19 \n <div class="cell col-header expiration">... \n <div class="cell option" strike="70.0" m...
17 70.0 \n <div class="cell row-header strike itm" ... 2016-10-21 \n <div class="cell col-header expiration">... \n <div class="cell option" strike="70.0" m...
...
562 260.0 \n <div class="cell row-header strike otm" ... 2017-01-20 \n <div class="cell col-header expiration">... \n <div class="cell option" strike="260.0" ...
564 270.0 \n <div class="cell row-header strike otm" ... 2017-01-20 \n <div class="cell col-header expiration">... \n <div class="cell option" strike="270.0" ...
565 280.0 \n <div class="cell row-header strike otm" ... 2017-01-20 \n <div class="cell col-header expiration">... \n <div class="cell option" strike="280.0" ...
我的意图是将StrikeCell 放在第一列下方(按升序排列),将ExpirationCell 放在各列中(按升序排列),将CellContents 作为表格中的值。基本上我正在创建一个带有 html 格式内容的大型数据透视表。
我可以做以下工作正常:
df.pivot(index='Strike', columns='Expiration', values='CellContents')
Strike 排序正确,Expiration 排序正确。
但是,如果我尝试使用字符串内容StrikeCell 和ExpirationCell 如下:
df.pivot(index='StrikeCell', columns='ExpirationCell', values='CellContents')
排序丢失。
所以问题是如何在将StrikeCell 用作index 和Expirationcell 用作columns 的同时重新获得Strike 和Expiration 的升序排序。
使用pandas 0.18.1。
【问题讨论】:
-
它看起来像一些其他问题,因为如果使用这个测试
df,它排序正确:df = pd.DataFrame({'StrikeCell':['f','e','c','d','a','b'], 'ExpirationCell':['c','a','b','a','a','b'], 'CellContents':['a','b','c','a','a','b']}) -
我在测试时也注意到了类似的情况。有人知道默认排序吗?
-
我不确定,但字母数字可以是默认排序。
-
这应该会恢复您的初始订购:
pivoted_df.reindex(index=df.StrikeCell, columns=df.ExpirationCell)。 HTH -
谢谢,但这并没有解决。
标签: python-2.7 sorting pandas pivot