Pandas Dataframe按照给定的index列表切分成多个小Dataframe

2023-10-30

整个思路比较简单:

  1. 根据dataframe.loc[]来框一个子dataframe
  2. 由于.loc[]是左闭右闭,所以如果希望哪一边开的话,需要删除哪一边的数据

使用的工具函数如下:

def split_dataframe_by_index_list(dataframe: pd.DataFrame, index_list: list, left=False, right=False):
    """按照index的列表切分dataframe
    :param dataframe: 待切分的dataframe
    :param index_list: 切分的index的列表,注意需要相对于dataframe的index是有序的
    :param left: 是否包含左边的值
    :param right: 是否包含右边的值
    """
    if len(index_list) == 0:
        yield dataframe
    else:
        if dataframe.index.values[0] not in index_list:
            index_list.insert(0, dataframe.index.values[0])
        if dataframe.index.values[-1] not in index_list:
            index_list.append(dataframe.index.values[-1])
        for index in range(len(index_list) - 1):
            this_df: pd.DataFrame = dataframe.loc[index_list[index]:index_list[index + 1], :]
            if not left:
                this_df = this_df.drop(index_list[index], axis=0)
            if not right:
                this_df = this_df.drop(index_list[index + 1], axis=0)
            if this_df.shape[0] > 1:
                yield this_df

示例代码

import pandas as pd
import numpy as np


def split_dataframe_by_index_list(dataframe: pd.DataFrame, index_list: list, left=False, right=False):
    """按照index的列表切分dataframe
    :param dataframe: 待切分的dataframe
    :param index_list: 切分的index的列表,注意需要相对于dataframe的index是有序的
    :param left: 是否包含左边的值
    :param right: 是否包含右边的值
    """
    if len(index_list) == 0:
        yield dataframe
    else:
        if dataframe.index.values[0] not in index_list:
            index_list.insert(0, dataframe.index.values[0])
        if dataframe.index.values[-1] not in index_list:
            index_list.append(dataframe.index.values[-1])
        for index in range(len(index_list) - 1):
            this_df: pd.DataFrame = dataframe.loc[index_list[index]:index_list[index + 1], :]
            if not left:
                this_df = this_df.drop(index_list[index], axis=0)
            if not right:
                this_df = this_df.drop(index_list[index + 1], axis=0)
            if this_df.shape[0] > 1:
                yield this_df


if __name__ == '__main__':
    df = pd.DataFrame(data=np.random.randint(0, 100, size=(50, 3)))
    for sub_df in split_dataframe_by_index_list(df, [11, 22, 33, 44]):
        print(sub_df.shape)

效果:

(10, 3) 1 10
(10, 3) 12 21
(10, 3) 23 32
(10, 3) 34 43
(4, 3) 45 48
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas Dataframe按照给定的index列表切分成多个小Dataframe 的相关文章

  • 如何在刻度标签和轴之间添加空间

    我已成功增加刻度标签的字体 但现在它们距离轴太近了 我想在刻度标签和轴之间添加一点呼吸空间 如果您不想全局更改间距 通过编辑 rcParams 并且想要更简洁的方法 请尝试以下操作 ax tick params axis both whic
  • Python、Tkinter、更改标签颜色

    有没有一种简单的方法来更改按钮中文本的颜色 I use button text input text here 更改按下后按钮文本的内容 是否存在类似的颜色变化 button color red Use the foreground设置按钮
  • Python PAM 模块的安全问题?

    我有兴趣编写一个 PAM 模块 该模块将利用流行的 Unix 登录身份验证机制 我过去的大部分编程经验都是使用 Python 进行的 并且我正在交互的系统已经有一个 Python API 我用谷歌搜索发现pam python http pa
  • DreamPie 不适用于 Python 3.2

    我最喜欢的 Python shell 是DreamPie http dreampie sourceforge net 我想将它与 Python 3 2 一起使用 我使用了 添加解释器 DreamPie 应用程序并添加了 Python 3 2
  • 如何在 Sublime Text 2 的 OSX 终端中显示构建结果

    我刚刚从 TextMate 切换到 Sublime Text 2 我非常喜欢它 让我困扰的一件事是默认的构建结果显示在 ST2 的底部 我的程序产生一些很长的结果 显示它的理想方式 如在 TM2 中 是并排查看它们 如何在 Mac 操作系统
  • 如何在Windows上模拟socket.socketpair

    标准Python函数套接字 套接字对 https docs python org 3 library socket html socket socketpair不幸的是 它在 Windows 上不可用 从 Python 3 4 1 开始 我
  • SQL Alchemy 中的 NULL 安全不等式比较?

    目前 我知道如何表达 NULL 安全的唯一方法 SQL Alchemy 中的比较 其中与 NULL 条目的比较计算结果为 True 而不是 NULL 是 or field None field value 有没有办法在 SQL Alchem
  • 从 scikit-learn 导入 make_blobs [重复]

    这个问题在这里已经有答案了 我收到下一个警告 D Programming Python ML venv lib site packages sklearn utils deprecation py 77 DeprecationWarning
  • 如何使用装饰器禁用某些功能的中间件?

    我想模仿的行为csrf exempt see here https docs djangoproject com en 1 11 ref csrf django views decorators csrf csrf exempt and h
  • 在 NumPy 中获取 ndarray 的索引和值

    我有一个 ndarrayA任意维数N 我想创建一个数组B元组 数组或列表 其中第一个N每个元组中的元素是索引 最后一个元素是该索引的值A 例如 A array 1 2 3 4 5 6 Then B 0 0 1 0 1 2 0 2 3 1 0
  • IRichBolt 在storm-1.0.0 和 pyleus-0.3.0 上运行拓扑时出错

    我正在运行风暴拓扑 pyleus verbose local xyz topology jar using storm 1 0 0 pyleus 0 3 0 centos 6 6并得到错误 线程 main java lang NoClass
  • 当玩家触摸屏幕一侧时,如何让 pygame 发出警告?

    我使用 pygame 创建了一个游戏 当玩家触摸屏幕一侧时 我想让 pygame 给出类似 你不能触摸屏幕两侧 的错误 我尝试在互联网上搜索 但没有找到任何好的结果 我想过在屏幕外添加一个方块 当玩家触摸该方块时 它会发出警告 但这花了很长
  • 从 pygame 获取 numpy 数组

    我想通过 python 访问我的网络摄像头 不幸的是 由于网络摄像头的原因 openCV 无法工作 Pygame camera 使用以下代码就像魅力一样 from pygame import camera display camera in
  • Nuitka 未使用 nuitka --recurse-all hello.py [错误] 编译 exe

    我正在尝试通过 nuitka 创建一个简单的 exe 这样我就可以在我的笔记本电脑上运行它 而无需安装 Python 我在 Windows 10 上并使用 Anaconda Python 3 我输入 nuitka recurse all h
  • 如何在 Django 中使用并发进程记录到单个文件而不使用独占锁

    给定一个在多个服务器上同时执行的 Django 应用程序 该应用程序如何记录到单个共享日志文件 在网络共享中 而不保持该文件以独占模式永久打开 当您想要利用日志流时 这种情况适用于 Windows Azure 网站上托管的 Django 应
  • 设置 torch.gather(...) 调用的结果

    我有一个形状为 n x m 的 2D pytorch 张量 我想使用索引列表来索引第二个维度 可以使用 torch gather 完成 然后然后还设置新值到索引的结果 Example data torch tensor 0 1 2 3 4
  • 对输入求 Keras 模型的导数返回全零

    所以我有一个 Keras 模型 我想将模型的梯度应用于其输入 这就是我所做的 import tensorflow as tf from keras models import Sequential from keras layers imp
  • 循环标记时出现“ValueError:无法识别的标记样式 -d”

    我正在尝试编码pyplot允许不同标记样式的绘图 这些图是循环生成的 标记是从列表中选取的 为了演示目的 我还提供了一个颜色列表 版本是Python 2 7 9 IPython 3 0 0 matplotlib 1 4 3 这是一个简单的代
  • 改变字典的哈希函数

    按照此question https stackoverflow com questions 37100390 towards understanding dictionaries 我们知道两个不同的字典 dict 1 and dict 2例
  • Python 分析:“‘select.poll’对象的‘poll’方法”是什么?

    我已经使用 python 分析了我的 python 代码cProfile模块并得到以下结果 ncalls tottime percall cumtime percall filename lineno function 13937860 9

随机推荐

  • flutter设置状态栏颜色

    Android flutter SystemUiOverlayStyle systemUiOverlayStyle SystemUiOverlayStyle statusBarColor Colors transparent SystemC
  • C语言程序设计之猜数字游戏(随机数的讲解)

    游戏玩法 电脑随机生成一个随机数 1 100之间 玩家根据提示进行猜测 直到猜对为止 相关知识点 分支与循环 随机数的生成 时间戳 标准输入输出 强制类型转换等 时间戳和随机数的生成将在本篇blog中重点讲解 其他知识点在其他blog中有重
  • 关于视频自动截取封面_ ffmpeg

    后台富文本框内 插入视频后 保存信息时 对视频封面处理 ffmpeg下载地址 创建bat文件 如以下关于bat文件的内容 start C Users 83469 Desktop ffmpeg 20180310 2536bd8 win64 s
  • Android 虚拟机简单介绍——ART、Dalvik、启动流程分析

    Android 虚拟机方面的知识 我是通过 深入理解 Android 内核设计思想 来学习的 内容特别多 只有一章 但有 160 页 感觉和 Android 开发有些偏 因此很多内容都没有认真去看 比如 EFL 格式等 这里只是选取了一些感
  • 尝试CornerNet-Lite进行目标识别并嵌入ROS

    CornerNet Lite是刚开源不久的实时目标检测方法 据说比YOLO3 牛逼 于是打算尝鲜一波 首先说运行的环境要求 1 Python 3 7 2 PyTorch 1 0 0 3 CUDA 10 意思是你得有一张NVIDIA的显卡 比
  • 10款最好用的代码编辑器 你是用哪种登录酷游?

    你是学习程式语言的初学者吗 本文由酷游登录网址AP98点NE 原创 未经许可请勿转发 可能刚学会第一门代码语言 或是厌倦了当前的代码编辑器 想改换一款介面美观又好用 以下将整理5款我们认为好用的代码编辑器 也欢迎各位分享自己正在使用的咯 1
  • 在Ubuntu上使用NFS挂载

    假设要把192 16 2 101服务器上的 home sharedata 挂载到192 16 2 102服务器上的 home receive data 一 服务端 1 安装NFS服务端 sudo apt get install nfs ke
  • 结合分析和数值技术 Python 在基本力学应用

    特点 展示了如何将分析方法和数值方法无缝集成来解决物理问题 内容 介绍 开始编程 单位和测量 一维运动 一维力 二维和三维运动 二维和三维力 受限运动 力和约束运动 工作能量 动量 脉冲和碰撞 多粒子系统 旋转运动 刚体的旋转 刚体动力学
  • java aop拦截器

    可在切面代码修改为数据库获取或redis中获取 依赖
  • 大数据平台搭建及搭建过程出错解析

    1 安装第一台虚拟机 参照博主文章 连接如下 https blog csdn net weixin 46457946 article details 114758813 2 配置网卡 配置网卡前看看你的ifconfig命令能不能用 一般来说
  • go详解strings包

    Count 计算字符串 sep 在 s 中的非重叠个数 如果 sep 为空字符串 则返回 s 中的字符 非字节 个数 1 使用 Rabin Karp 算法实现 html view plain copy func Count s sep st
  • 【Java开发者专场】阿里专家杜万:Java响应式编程,一文全面解读 ...

    本篇文章来自于2018年12月22日举办的 阿里云栖开发者沙龙 Java技术专场 杜万专家是该专场第四位演讲的嘉宾 本篇文章是根据杜万专家在 阿里云栖开发者沙龙 Java技术专场 的演讲视频以及PPT整理而成 摘要 响应式宣言如何解读 Ja
  • 【Linux】利用消息队列实现一个简单的进程间双向通信(两种方式)

    在实现利用消息队列的进程间通信之前 先了解一下基本的概念和所需要用到的函数 消息队列 消息队列是Linux内核地址空间中的内部链表 各个进程可以通过它来进行消息传递 进程发送的消息会顺序写入消息队列之中 且每个消息队列都有IPC标识符唯一地
  • C# 采用Basic Auth传递Post或者GET 数据

    public class JiraApi private string m Username private string m Password public JiraApi string username string password
  • c++实现置换选择排序有序子序列

    1 输入数据个数 2 输入每个数据 3 输入内存大小 4 输出有序序列
  • HTML中四种选择器

    1 类选择器class class 2 id 选择器 id 3 派生选择器 p strong 4 属性选择器 title title te 代码如下 p strong 派生选择器 strong p li strong Hello 派生选 s
  • Python数据结构与算法分析 第四章 递归 贪心 动态规划bp 记忆化搜索

    递归算法也总结出 三定律 1 递归算法必须有一个基本结束条件 最小规模问题的直接解决 2 递归算法必须能改变状态向基本结束条件演 进 减小问题规模 3 递归算法必须调用自身 解决减小了规模的相同问题 10进制转16 递归实现 def to1
  • ray tracing of Embree

    GitHub embree embree Embree ray tracing kernels repository Intel Embree is a collection of high performance ray tracing
  • QCM2290平台XBL阶段配置I2C

    1 修改QcomPkg SocPkg AgattiPkg Settings I2C core i2c devcfg c CONFIGURATION START define TOP QUP 00 SDA TLMM GPIO CFG 0 1
  • Pandas Dataframe按照给定的index列表切分成多个小Dataframe

    整个思路比较简单 根据dataframe loc 来框一个子dataframe 由于 loc 是左闭右闭 所以如果希望哪一边开的话 需要删除哪一边的数据 使用的工具函数如下 def split dataframe by index list