首页 > 编程问答 >如何为每个组保留预定义的不同行数?

如何为每个组保留预定义的不同行数?

时间:2024-08-04 17:06:47浏览次数:15  
标签:python pandas dataframe

我有一个包含几列的数据框。我想按城市订购并保留 'city' == 'Buenos Aires' 一定数量的行。对于 'city' == 'Paris' ,还有另一个行数。有没有办法做到这一点? 这里 显示了一种为每个组保持相同行数的方法,但我想要不同的行数。

    city            number
0   Buenos Aires    14
1   Paris           23
2   Barcelona       12
3   Buenos Aires    14
4   Buenos Aires    14
... ...             ...

可以使用 Pandas 的 groupby head 函数的组合,为每个组保留不同数量的行。以下是操作方法:

  1. 创建一个字典来存储每个城市的所需行数。 例如:
rows_per_city = {
    'Buenos Aires': 2,  # 为 Buenos Aires 保留 2 行
    'Paris': 3,         # 为 Paris 保留 3 行
    # 为其他城市添加更多条目
}
  1. 使用 groupby 按城市对 DataFrame 进行分组。

  2. 使用 head 函数获取每个组中的所需行数。 可以使用字典查找来获取每个城市的正确行数。

import pandas as pd

# 示例 DataFrame
df = pd.DataFrame({
    'city': ['Buenos Aires', 'Paris', 'Barcelona', 'Buenos Aires', 'Buenos Aires', 'Paris', 'Paris', 'Paris', 'Barcelona'],
    'number': [14, 23, 12, 14, 14, 23, 12, 14, 14]
})

# 为每个城市定义所需的行数
rows_per_city = {
    'Buenos Aires': 2,
    'Paris': 3,
}

# 使用 lambda 函数对每个组应用 head 并从字典中获取 n 值
df_filtered = df.groupby('city').apply(lambda x: x.head(rows_per_city.get(x.name, len(x))))

# 如果索引级别过多,则重置索引
df_filtered = df_filtered.reset_index(level=0, drop=True)

# 打印结果
print(df_filtered)

这将创建一个新的 DataFrame,其中 Buenos Aires 的前两行和 Paris 的前三行,以及其他城市的所有行(因为它们未在字典中指定)。

以下是对代码的解释:

  • groupby('city') 按“城市”列对 DataFrame 进行分组。
  • apply(lambda x: ...) 将一个函数应用于每个组。
  • x 代表一个组(在本例中是一个 DataFrame)。
  • x.head(...) 获取组中的前 n 行。
  • rows_per_city.get(x.name, len(x)) 获取当前城市 ( x.name ) 的所需行数。如果未找到城市,则使用 len(x) (组中的总行数),从而保留所有行。
  • reset_index(level=0, drop=True) 删除由 groupby 操作创建的多余索引级别。

此方法允许通过为所需的每个组在 rows_per_city 字典中指定所需的组和行数来控制每个组保留的行数。

标签:python,pandas,dataframe
From: 74987994

相关文章

  • 完全用python 实现消息中间件2
    为了完善这个简单的消息中间件,我们可以添加以下功能:消息持久化:虽然在这个示例中我们不会使用数据库,但我们可以将消息保存到文件中,以模拟持久化存储。消息确认:添加一个机制来确认消息已经被消费。并发控制:确保在多线程或多进程环境中消息的安全处理。以下是更新后的代码:fr......
  • Pandas 有效地获取每个数据帧组中具有多个 n 值的前 n 行
    从像df=pd.DataFrame([{'name':'a','id':0,'category':'1'},{'name':'b','id':1,'category':'1'},{'name':......
  • 16:Python一些常用的变量命名
    变量名的命名直接影响到程序的易读性,好的变量名应该简洁、易于理解。一、单字符变量名数学中通常用x,y来表示坐标,同样的,在命名变量时,可以使用一些具有特定含义的单个字符。这样的变量名兼具有意义和极简两大优点,作为编程人员应熟记。具体列举如下。i、j、k:数值(integer(整数))......
  • 15:Python数据类型的综合对比整理
    #Python有六个标准的数据类型:#Numbers(数字)int#String(字符串)str字符串一旦创建,不可修改,一旦修改或者拼接,都会造成重新生成字符串#List(列表)list中号括起来,逗号分开,可以是数字、字符串、列表、布尔值,列表可以嵌套任何类型,列表有序元素可以被修改#Tup......
  • 用Python打造精彩动画与视频, 6.2 使用Manim进行数学和科学可视化
     6.2使用Manim进行数学和科学可视化Manim(MathematicalAnimationEngine)是一款强大的动画制作工具,尤其适用于数学和科学领域的可视化。它由3Blue1Brown的GrantSanderson开发,旨在通过动画演示复杂的数学概念,使其更易于理解。使用Manim,用户可以创建高质量的数学动画,从简单的......
  • 用Python打造精彩动画与视频,5.3 使用Manim创建简单动画
     5.3使用Manim创建简单动画在这一节中,我们将介绍如何使用Manim创建简单的动画。我们将从基本的场景构建开始,然后演示如何添加动画效果。通过这些示例,你将能够掌握使用Manim创建各种动画的基本技能。5.3.1创建一个简单的场景Manim中的基本单元是场景(Scene)。每个场景都是一......
  • 用Python打造精彩动画与视频, 5.2 安装和设置Manim
     5.2安装和设置ManimManim是一个强大的动画库,用于创建高质量的数学动画。它最初由3Blue1Brown的GrantSanderson开发,并被广泛用于教育和展示。以下是安装和设置Manim的详细步骤。5.2.1安装ManimManim需要Python环境和一些依赖库。在安装Manim之前,请确保已经......
  • 用Python打造精彩动画与视频,6.1 复杂动画场景的构建
     第六章:探索Manim的潜力6.1复杂动画场景的构建在本节中,我们将深入探索如何使用Manim构建复杂的动画场景。Manim是一款功能强大的Python库,广泛应用于数学可视化和教育视频制作。通过理解并掌握Manim的高级功能和技巧,你将能够创建出引人入胜且具有高可读性的动画场景。6.1.1......
  • 在 Python 中从 HTML 中抓取嵌入的 Google Sheet
    这对我来说相对棘手。我正在尝试提取来自python中的google工作表的嵌入表。这是链接我不拥有该工作表,但它是公开可用的。这是迄今为止我的代码,当我输出标题时,它向我显示“”。任何帮助将不胜感激。最终目标是将此表转换为pandasDF。多谢你们importlx......
  • 如何使用 Python 在 Google 或 DuckDuckGo 中快速获取答案
    我有一个人工智能助手项目,我希望它在互联网上搜索。我想使用适用于Python的GoogleQuickAnswerBox或DuckDuckGoInstantAnswerAPI。我看到了其他问题,但它们对我没有多大帮助。这是我想要实现的一个示例:问题:什么是长颈鹿?Google的答案:DuckDuckGo的......