python - 展平的数据透视表值应与列相邻
问题描述
展平后,我得到 (Completed, A), (Completed, B), (Completed, C) 而我希望它是 (Completed, A), (Not_Completed, A), (Completed, B), (Not_Completed, B )。
x = pd.DataFrame({'P':['A','B', 'C'], 'id' : ['1100', '1101', '1102'], 'Completed' : [10,4,8], 'Not_Completed' : [6,2,2]})
P id Completed Not_Completed
0 A 1100 10 6
1 B 1101 4 2
2 C 1102 8 2
x = x.sort_values(by = 'Completed',ascending = False)
x1 = x.pivot_table(index='id', columns=['P'], values=['Completed', 'Not_Completed'], fill_value = 0)
flattened = pd.DataFrame(x1.to_records())
flattened
实际列:
id (Completed, A), (Completed, B), (Completed, C), (Not_Completed, A), (Completed, B), (Not_Completed, C)
预期列:
id (Completed, A), (Not_Completed, A), (Completed, C), (Not_Completed, C), (Completed, B), (Not_Completed, B)
解决方案
x1
您可以在展平之前对 's 列进行排序:
flattened = pd.DataFrame(x1.sort_index(level=1, axis=1)
.to_records())
flattened
给你你想要的(给定A, B, C
的)。
如果您有订单字典:
orders = {'A':10, 'B':4, 'C':8}
然后您可以按该顺序对列进行排序:
cols = sorted(list(x1.columns),
key=lambda x: (-orders[x[1]], x[0])
)
flattened = pd.DataFrame(x1[cols].to_records())
推荐阅读
- laravel - Laravel Socialite 谷歌登录再次转移到登录页面
- python - 如何在涉及类名称空间的 selenium python 中刮取 li 标签?
- python - Stripe AttributeError:“str”对象没有属性“objects”(自定义用户模型)
- react-native - ClipPath 的动画不适用于 react-native-svg
- ios - 如何将参数添加到通用 UITapGestureRecognizer?
- user-interface - 在 xamarin 表单中编辑 NavigationPage 后退按钮大小
- python - 无法使用 python docker image 使用已安装的包
- symfony - 列表中的苏禄媒体显示
- python - 在gnome-terminal python中从本地用户切换到root后不执行命令
- css - CSS中的minmax()和clamp()有什么区别?