python - Pandas - 从 groupby 操作的前 n 组创建一个新的 DataFrame
问题描述
具有以下DF:
A B
0 1 11
1 2 22
2 2 22
3 3 33
4 3 33
我想 groupby 'A' 然后取前 n 个组并从中创建一个新的数据框。我环顾四周,找到了这个答案:
result = [g[1] for g in list(grouped)[:3]]
但是该解决方案返回一个列表而不是 DF,此外,从分组结果创建一个列表似乎是多余的。
更新:
预期输出是由前 n 个组组成的新 DF,例如,如果n=2
输出是:
A B
0 1 11 <-- first group
1 2 22 <-- second group
2 2 22 <-- second group
任何帮助,将不胜感激
解决方案
从技术上讲,您不能:组不一定按照您的数据框的顺序:grouped
按分组列排序的结果(默认情况下,可以关闭),然后定义顺序。换句话说,应使用分组列(此处为 A)中的值访问各个组。
在您的情况下,这可能有效:
import pandas as pd
df = pd.DataFrame({'A': [1, 2, 2, 3, 3], 'B': [11, 22, 22, 33, 33]})
grouped = df.groupby('A')
n = 2
df = pd.concat([group for name, group in grouped][:n])
print(df)
产生
A B
0 1 11
1 2 22
2 2 22
但如果输入数据框如下(注意列中值的顺序):
import pandas as pd
df = pd.DataFrame({'A': [2, 2, 3, 3, 1], 'B': [22, 22, 33, 33, 11]})
grouped = df.groupby('A')
n = 2
df = pd.concat([group for name, group in grouped][:n])
print(df)
前两个分组连接仍然是
A B
4 1 11
0 2 22
1 2 22
因为这些组是按“A”列中的值排序的。(请注意这些值与以前的情况相同;但是,索引不同。)
因此,对于一组 groupby 结果,没有真正的“前 n 个元素”。
推荐阅读
- iframe - 将 GSheet 发布到 Web
- angular - 在不初始化组件的情况下获取角度(9)组件模板数据
- javascript - 如何在不改变墙壁位置的情况下放大和缩小
- amazon-web-services - 在“目标”Terraform 周围找不到 aws_apigatewayv2_route 的正确参数
- ajax - 使用 select2 下拉菜单在编辑表单中显示选定的选项
- sql - 错误:运算符不存在:整数 - 记录
- snowflake-cloud-data-platform - Snowflake DB 中数据库级别的 MONITOR 权限是什么?
- sql - 如果该字段存在于临时表中,则删除该字段
- azure - 具有安全 Azure 功能后端的静态 Blazor Web 程序集
- flutter - 我如何加载 100 幅图像以在颤动中撞击?