Python Pandas: 按另一列对数据透视表 Table 列进行排序
Python Pandas: Sorting Pivot Table column by another column
我正在尝试使用 pivot_table 功能在 Python pandas 包中转换一些数据,但作为其中的一部分,我有一个我想看到的特定定制订单我的列返回 - 由数据框中已经存在的 Sort_Order 字段确定。所以对于测试示例:
raw_data = {'Support_Reason' : ['LD', 'Mental Health', 'LD', 'Mental Health', 'LD', 'Physical', 'LD'],
'Setting' : ['Nursing', 'Nursing', 'Residential', 'Residential', 'Community', 'Prison', 'Residential'],
'Setting_Order' : [1, 1, 2, 2, 3, 4, 2],
'Patient_ID' : [6789, 1234, 4567, 5678, 7890, 1235, 3456]}
Data = pd.DataFrame(raw_data, columns = ['Support_Reason', 'Setting', 'Setting_Order', 'Patient_ID'])
Data
然后旋转:
pivot = pd.pivot_table(Data, values='Patient_ID', index=['Support_Reason'],
columns=['Setting'], aggfunc='count',dropna = False)
pivot = pivot.reset_index()
pivot
这正是我希望我的 table 看起来的样子,只是列默认为 A-Z 排序。我希望它们按照 Setting_Order 列升序排列——这样顺序就是护理、住宅、社区然后是监狱。是否有一些额外的语法可以添加到我的 pd.pivot_table 代码中来实现这一点?
我意识到有一些不同的 work-arounds 用于此,最简单的是 re-ordering 之后的列(!)但我想避免必须 hard-code 列名称,因为这些将随时间变化(标题及其顺序),设置和 Setting_Order 字段将在单独的参考 table 中进行管理。因此,任何形式的答案都可以避免在代码中列出设置,这确实是理想的选择。
col_order = list(Data.sort_values('Setting_Order')['Setting'].unique())
pivot[col_order+['Support_Reason']]
这有帮助吗?
尝试:
ordered = df.sort_values("Setting_Order")["Setting"].drop_duplicates().tolist()
pivot = pivot[list(pivot.columns.difference(ordered))+ordered]
我正在尝试使用 pivot_table 功能在 Python pandas 包中转换一些数据,但作为其中的一部分,我有一个我想看到的特定定制订单我的列返回 - 由数据框中已经存在的 Sort_Order 字段确定。所以对于测试示例:
raw_data = {'Support_Reason' : ['LD', 'Mental Health', 'LD', 'Mental Health', 'LD', 'Physical', 'LD'],
'Setting' : ['Nursing', 'Nursing', 'Residential', 'Residential', 'Community', 'Prison', 'Residential'],
'Setting_Order' : [1, 1, 2, 2, 3, 4, 2],
'Patient_ID' : [6789, 1234, 4567, 5678, 7890, 1235, 3456]}
Data = pd.DataFrame(raw_data, columns = ['Support_Reason', 'Setting', 'Setting_Order', 'Patient_ID'])
Data
然后旋转:
pivot = pd.pivot_table(Data, values='Patient_ID', index=['Support_Reason'],
columns=['Setting'], aggfunc='count',dropna = False)
pivot = pivot.reset_index()
pivot
这正是我希望我的 table 看起来的样子,只是列默认为 A-Z 排序。我希望它们按照 Setting_Order 列升序排列——这样顺序就是护理、住宅、社区然后是监狱。是否有一些额外的语法可以添加到我的 pd.pivot_table 代码中来实现这一点?
我意识到有一些不同的 work-arounds 用于此,最简单的是 re-ordering 之后的列(!)但我想避免必须 hard-code 列名称,因为这些将随时间变化(标题及其顺序),设置和 Setting_Order 字段将在单独的参考 table 中进行管理。因此,任何形式的答案都可以避免在代码中列出设置,这确实是理想的选择。
col_order = list(Data.sort_values('Setting_Order')['Setting'].unique())
pivot[col_order+['Support_Reason']]
这有帮助吗?
尝试:
ordered = df.sort_values("Setting_Order")["Setting"].drop_duplicates().tolist()
pivot = pivot[list(pivot.columns.difference(ordered))+ordered]