python - 在保留原始行的同时对数据框组进行排序
问题描述
这是原始数据框:
Name Version Cost
A 0.0.3 1.7
C 0.0.2 2.5
A 0.0.1 1.0
C 0.0.1 2.4
B 0.0.2 3.7
B 0.0.1 3.5
A 0.0.2 1.4
C 0.0.3 2.6
B 0.0.3 3.8
使用以下代码在组内分组和排序后:
df = df.sort_values(['Name', 'Version'], ascending=[True, False])
df = df.groupby(['Name'], sort=False)
df = df.apply(lambda x: x.sort_values(['Cost'], ascending=False))
现在我有这个数据框,其中成本在组内排序,组按字母顺序排列。
Name Version Cost
Name
A A 0.0.3 1.7
A 0.0.2 1.4
A 0.0.1 1.0
B B 0.0.3 3.8
B 0.0.2 3.7
B 0.0.1 3.5
C C 0.0.3 2.6
C 0.0.2 2.5
C 0.0.1 2.4
问题是,现在我想按每个组的总成本对组进行排序,因此预期的结果如下所示:
Name Version Cost
B 0.0.3 3.8
B 0.0.2 3.7
B 0.0.1 3.5
C 0.0.3 2.6
C 0.0.2 2.5
C 0.0.1 2.4
A 0.0.3 1.7
A 0.0.2 1.4
A 0.0.1 1.0
我怎样才能在不丢失行的情况下实现它。
解决方案
您可以创建临时列并按其排序。然后删除该列:
df["tmp"] = df.groupby("Name")["Cost"].transform("sum")
df = df.sort_values(by="tmp", ascending=False).drop("tmp", 1)
print(df)
印刷:
Name Version Cost
3 B 0.0.3 3.8
4 B 0.0.2 3.7
5 B 0.0.1 3.5
6 C 0.0.3 2.6
7 C 0.0.2 2.5
8 C 0.0.1 2.4
0 A 0.0.3 1.7
1 A 0.0.2 1.4
2 A 0.0.1 1.0
df
用过的:
Name Version Cost
A 0.0.3 1.7
A 0.0.2 1.4
A 0.0.1 1.0
B 0.0.3 3.8
B 0.0.2 3.7
B 0.0.1 3.5
C 0.0.3 2.6
C 0.0.2 2.5
C 0.0.1 2.4
推荐阅读
- sql - 如何插入到 2 个表中?
- linux - mod_jk 无法连接 Apache 和 tomcat
- javascript - 更新对象的 useState 数组中的对象值
- javascript - 如何计算开始日期和结束日期期间的周数?
- javascript - 从 Amazon S3 存储桶加载图像时遇到问题(不使用 URL)
- flutter - RenderBox 没有在 Flutter 中布局
- microsoft-graph-api - 如何使用 API 创建事件日历 Microsoft-GraphAPI
- c# - 我可以从 64 位 C# Winforms 应用程序调用 MAPI32.DLL > MAPISendMail 吗?
- intershop - 在后台获取国家名称和国家代码时出现 NullPtr 异常
- r - 仅选择最近的 POSIXlt 日期/时间