Python 数据透视表的排序列标签
另一个熊猫排序问题(尝试了所有当前的SO问题,但没有找到任何解决方案) 我有一个Python 数据透视表的排序列标签,python,pandas,Python,Pandas,另一个熊猫排序问题(尝试了所有当前的SO问题,但没有找到任何解决方案) 我有一个pandas pivot\u表如下: rows = ['Tool_Location'] cols = ['shift_date','Part_Number', 'shift'] pt = df.pivot_table(index='Tool_Location', values='Number_of_parts', dropna=False, fill_value ='0', columns=cols, aggfunc
pandas pivot\u表
如下:
rows = ['Tool_Location']
cols = ['shift_date','Part_Number', 'shift']
pt = df.pivot_table(index='Tool_Location', values='Number_of_parts', dropna=False, fill_value ='0', columns=cols, aggfunc='count')
产生:
Shift date 10/19
Part_number 40001
shift first second third
tool_loc
T01 0 1 0
T02 2 1 0
我想切换换档标签的顺序,使其为third first second
编辑:
接近解决方案但看不到它
使用:
col_list = pt.columns.tolist()
output:
[('10/20/16', 'first'), ('10/20/16', 'second'), ('10/20/16', 'third'), ('10/21/16', 'first'), ('10/21/16', 'second'), ('10/21/16', 'third')]
任何人都知道如何动态重新排序项目,以便:
[('10/20/16', 'third'), ('10/20/16', 'first'), ('10/20/16', 'second'), ('10/21/16', 'first'), ('10/21/16', 'second'), ('10/21/16', 'second')]
因为我们可以使用pt=pt[col_list]
df对列进行重新排序。pivot_table
生成一个数据帧。如果你在台词之后做了这样的事情会怎么样:
pt = pt[["third","first","second"]]
df.pivot\u表
生成数据帧。如果你在台词之后做了这样的事情会怎么样:
pt = pt[["third","first","second"]]
可以使用lambda和dict对元组进行排序:
pt = pt[sorted(df.columns.tolist(), key=lambda tup: list(your_dict.keys())[list(your_dict.values()).index(tup[1])])]
要执行此操作,您还必须声明一个带有所需顺序的dict:
your_dict = {1: 'first', 3: 'third', 2: 'second'}
可以使用lambda和dict对元组进行排序:
pt = pt[sorted(df.columns.tolist(), key=lambda tup: list(your_dict.keys())[list(your_dict.values()).index(tup[1])])]
要执行此操作,您还必须声明一个带有所需顺序的dict:
your_dict = {1: 'first', 3: 'third', 2: 'second'}
在/tooltrack/summary/“['third''first''second']处给我一个
键错误,不在索引中”
只需将'second'更改为'sec'。从上面的数据框来看抱歉-它实际上是数据框中的“秒”,我输入了示例。在/tooltrack/summary/“['third''first''second']处给我一个键错误,不在索引中”
只需将“second”更改为“sec”。从上面的数据框来看抱歉-它实际上是数据框中的“第二个”,我打错了这个例子。如果你能在问题开头的轴之前添加原始数据,这将使理解更容易,因为你只显示转换,我们必须猜测起始点。如果你能在问题开头的轴之前添加原始数据,这将使理解更容易因为你只展示了变换,我们必须猜测起始点。