在 Pandas 多重索引内重新采样

2023-12-12

我有一些分层数据,这些数据从底部到时间序列数据,看起来像这样:

df = pandas.DataFrame(
    {'value_a': values_a, 'value_b': values_b},
    index=[states, cities, dates])
df.index.names = ['State', 'City', 'Date']
df

                               value_a  value_b
State   City       Date                        
Georgia Atlanta    2012-01-01        0       10
                   2012-01-02        1       11
                   2012-01-03        2       12
                   2012-01-04        3       13
        Savanna    2012-01-01        4       14
                   2012-01-02        5       15
                   2012-01-03        6       16
                   2012-01-04        7       17
Alabama Mobile     2012-01-01        8       18
                   2012-01-02        9       19
                   2012-01-03       10       20
                   2012-01-04       11       21
        Montgomery 2012-01-01       12       22
                   2012-01-02       13       23
                   2012-01-03       14       24
                   2012-01-04       15       25

我想对每个城市进行时间重采样,所以像

df.resample("2D", how="sum")

会输出

                             value_a  value_b
State   City       Date                        
Georgia Atlanta    2012-01-01        1       21
                   2012-01-03        5       25
        Savanna    2012-01-01        9       29
                   2012-01-03       13       33
Alabama Mobile     2012-01-01       17       37
                   2012-01-03       21       41
        Montgomery 2012-01-01       25       45
                   2012-01-03       29       49

as is, df.resample('2D', how='sum') gets me

TypeError: Only valid with DatetimeIndex or PeriodIndex

很公平,但我希望这能起作用:

>>> df.swaplevel('Date', 'State').resample('2D', how='sum')
TypeError: Only valid with DatetimeIndex or PeriodIndex

在这一点上我真的没有想法了......有什么方法 stack 和 unstack 可以帮助我吗?


pd.Grouper允许您指定“目标对象的 groupby 指令”。在 特别是,您可以使用它按日期分组,即使df.index不是一个DatetimeIndex:

df.groupby(pd.Grouper(freq='2D', level=-1))

The level=-1 tells pd.Grouper查找 MultiIndex 最后一级中的日期。 此外,您可以将其与索引中的其他级别值结合使用:

level_values = df.index.get_level_values
result = (df.groupby([level_values(i) for i in [0,1]]
                      +[pd.Grouper(freq='2D', level=-1)]).sum())

看起来有点尴尬,但是using_Grouper事实证明比我原来的要快得多 建议,using_reset_index:

import numpy as np
import pandas as pd
import datetime as DT

def using_Grouper(df):
    level_values = df.index.get_level_values
    return (df.groupby([level_values(i) for i in [0,1]]
                       +[pd.Grouper(freq='2D', level=-1)]).sum())

def using_reset_index(df):
    df = df.reset_index(level=[0, 1])
    return df.groupby(['State','City']).resample('2D').sum()

def using_stack(df):
    # http://stackoverflow.com/a/15813787/190597
    return (df.unstack(level=[0,1])
              .resample('2D').sum()
              .stack(level=[2,1])
              .swaplevel(2,0))

def make_orig():
    values_a = range(16)
    values_b = range(10, 26)
    states = ['Georgia']*8 + ['Alabama']*8
    cities = ['Atlanta']*4 + ['Savanna']*4 + ['Mobile']*4 + ['Montgomery']*4
    dates = pd.DatetimeIndex([DT.date(2012,1,1)+DT.timedelta(days = i) for i in range(4)]*4)
    df = pd.DataFrame(
        {'value_a': values_a, 'value_b': values_b},
        index = [states, cities, dates])
    df.index.names = ['State', 'City', 'Date']
    return df

def make_df(N):
    dates = pd.date_range('2000-1-1', periods=N)
    states = np.arange(50)
    cities = np.arange(10)
    index = pd.MultiIndex.from_product([states, cities, dates], 
                                       names=['State', 'City', 'Date'])
    df = pd.DataFrame(np.random.randint(10, size=(len(index),2)), index=index,
                      columns=['value_a', 'value_b'])
    return df

df = make_orig()
print(using_Grouper(df))

yields

                               value_a  value_b
State   City       Date                        
Alabama Mobile     2012-01-01       17       37
                   2012-01-03       21       41
        Montgomery 2012-01-01       25       45
                   2012-01-03       29       49
Georgia Atlanta    2012-01-01        1       21
                   2012-01-03        5       25
        Savanna    2012-01-01        9       29
                   2012-01-03       13       33

这是一个基准比较using_Grouper, using_reset_index, using_stack在 5000 行 DataFrame 上:

In [30]: df = make_df(10)

In [34]: len(df)
Out[34]: 5000

In [32]: %timeit using_Grouper(df)
100 loops, best of 3: 6.03 ms per loop

In [33]: %timeit using_stack(df)
10 loops, best of 3: 22.3 ms per loop

In [31]: %timeit using_reset_index(df)
1 loop, best of 3: 659 ms per loop
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Pandas 多重索引内重新采样 的相关文章

  • 重新索引错误没有意义

    I have DataFrames大小在 100k 到 2m 之间 我正在处理这个问题的框架是如此之大 但请注意 我必须对其他框架执行相同的操作 gt gt gt len data 357451 现在这个文件是通过编译许多文件创建的 所以它
  • 如何为 Intellij/PyCharm 设置 PYTHONSTARTUP 脚本

    我尝试添加PYTHONSTARTUP环境变量 我还尝试了自定义启动脚本 但更令人惊讶的是 这also没有工作 npa别名无法识别 出于一点绝望 我什至尝试添加到interpreter options 那什么也没做 实际上是什么Interpr
  • pip 安装失败,SSL 证书验证失败 (_ssl.c:833)

    我无法通过 pip install 安装任何外部 python 模块 我已经正确安装了 python 但如果我使用 pip install 它会显示此错误 这是我运行后的代码pip install pytesseract C Users 1
  • Spyder 导入模块出错

    我正在尝试在 Spyder 中使用 sklearn 一开始 当我尝试导入它时 我收到 ImportError No module named sklearn 然后我用 PYTHONPATH 管理器设置 PATH 然后使用工具菜单中的 更新模
  • 使用 Pymongo 从 Windows 连接到 AWS 实例上的 MongoDB

    此行反复抛出错误 client MongoClient ec2 12 345 67 89 us east 2 compute amazonaws com 27017 ssl True ssl keyfile C mongo pem 由于显而
  • 了解 asyncio 已经运行的永久循环和挂起的任务

    我在理解如何将新任务挂起到已经运行的事件循环中时遇到问题 这段代码 import asyncio import logging asyncio coroutine def blocking cmd while True logging in
  • 检测/删除 Python 2 + GTK 中不成对的代理字符

    在Python 2 7中我可以成功转换Unicode字符串 abc udc34xyz 转换为 UTF 8 结果是 abc xed xb0 xb4xyz 但是当我将 UTF 8 字符串传递给例如时 pango parse markup or
  • 在 vim 折叠线中语法高亮 Python

    我发现代码折叠 http en wikipedia org wiki Code folding帮助我更好地组织我的文件 因此 在我的底部 vimrc 我启用vim代码折叠 http vimdoc sourceforge net htmldo
  • 从主机名中提取域名

    是否有一种编程方式可以从给定的主机名查找域名 给出 gt www yahoo co jp 返回 gt yahoo co jp 有效但非常慢的方法是 拆分为 并从左侧删除 1 个组 使用 dnspython 加入并查询 SOA 记录 当返回有
  • 类型错误:需要 Future 或协程

    我尝试在 asyncssh 上自动重新连接 ssh 客户端 SshConnectManager 必须留在后台并在需要时进行 ssh 会话 class SshConnectManager object def init self host u
  • python-polars 通过分隔符将字符串列拆分为许多列

    在 pandas 中 以下代码会将 col1 中的字符串拆分为许多列 有没有办法在极地做到这一点 d col1 a b c d a b c d df pd DataFrame data d df a b c d df col1 str sp
  • Python,多线程,获取网页,下载网页

    我想在一个站点批量下载网页 我的 urls txt 文件中有 5000000 个 url 链接 大约有300M 如何让多线程链接这些网址并下载这些网页 或者如何批量下载这些网页 我的想法 with open urls txt r as f
  • 如何在数据框中绘制包含三列的无向图,形成 3 种不同类型的节点(三方)?

    我正在尝试使用三个不同的列表绘制网络的可视化 这三个列表形成 3 种类型的节点 下面的代码正在运行 如图所示 需要两个列表 用户 ID 评分 但是 我希望我的图表是三部分的 即 user userId review ratings prod
  • PyCharm - 如何挂起所有线程

    我们使用 PyCharm 5 0 1 进行多线程调试 当它在断点处停止时 只有特定线程停止 而所有其他线程继续 这使得 冻结时刻 和检查参数值以及其他线程的当前状态变得困难 当其中一个线程在断点处停止时 是否可以挂起所有线程 这在最新的 P
  • 如何加速 pandas 字符串函数?

    我正在使用 pandas 矢量化 str split 方法来提取从 上的拆分 返回的第一个元素 我还尝试使用 df apply 与 lambda 和 str split 来产生等效的结果 使用 timeit 时 我发现 df apply 的
  • Python 中的十进制到二进制半精度 IEEE 754

    我只能使用以下命令将十进制转换为二进制单精度 IEEE754struct pack模块 或者使用相反的方法 float16 或 float32 numpy frombuffer 是否可以使用 Numpy 将十进制转换为二进制半精度浮点数 我
  • R 中的微秒时间戳

    在 CSV 文件中 我有几列 其中一列有时间戳 其中每个时间戳是今天午夜经过的微秒 每个 csv 文件仅包含一天内的数据 因此这并不含糊 我的问题是 如何将这些微秒时间戳解析为 R 多谢 我的 CSV 文件的一部分 34201881666
  • Matplotlib 中的 TwoSlopeNorm 未按预期工作

    我正在尝试创建一个具有发散颜色图的绘图 该颜色图在零附近不对称 In this https stackoverflow com a 20146989 6288682例如 DivergingNorm函数被使用并产生我想要的 然而 我使用的是更
  • 通过 ManyToManyField = Value 对 django 查询集进行排序

    如果有一些模型 例如 class Tag models Model name models CharField class Thing models Model title models CharField tags models Many
  • django admin 中内联模型的分页器

    我有这个简单的 django 模型 由一个传感器和特定传感器的值组成 每个日射强度计的值数量很多 gt 30k 是否可以以某种方式分页PyranometerValues在特定日期或一般情况下将分页器应用于管理内联视图 class Pyran

随机推荐

  • CSS高度100%问题

    我知道有很多关于 css 100 高度问题的问题 但是我尝试按照那里的说明进行操作 但高度仍然不是 100 所以我想我会再问这个问题 您可以看到问题的网站是 www exendo be 一些CSS样式 html height auto im
  • Ruby - Rails - 将文本传递给 javascript

    为什么这不将文本传递给 javascript jquery i error 里面肯定有一个字符串 我可以在控制台上打印它 js erb 文件 gt error Validation error s Item Is not defined o
  • Intellij checkstyle - 设置相对于模块的路径[重复]

    这个问题在这里已经有答案了 我的公司正在从 Eclipse 切换到 IntelliJ 在 Eclipse 中 我们对抑制过滤器进行了以下配置checkstyle xml
  • 如何使用 .querySelector 选择器定位 .style 属性?

    我通过以下方式选择了特定课程 querySelectorAll var hit3 document querySelectorAll lattern hit 3 circle 我现在正在尝试瞄准并调整 style visibility通过执
  • Dart 1.x 书籍仍然适用吗?

    既然 Dart 2 已发布 那么 Dart 1 x 书籍是否仍然相关 Dart 2 文档仅指向迁移指南 我正在尝试学习 Dart 想知道是否应该购买一本基于 Dart 1 x 的书籍 或者应该等待基于 Dart 2 的书籍的出版 Dart
  • 如何跨子图添加层次轴以标记组?

    我有一组可以分组的不同时间序列 例如 下图显示了 A B C 和 D 系列 但是 A 和 B 属于 G1 组 C 和 D 属于 G2 组 我想通过在左侧添加另一个轴来反映这一点 该轴穿过涡轮机组并相应地标记这些轴 到目前为止我已经尝试了一些
  • Eclipse WTP:项目中定义的类的 JSP 文件中出现“导入 ___ 无法解析”错误

    一位 Visual Studio 用户在 Eclipse 中苦苦挣扎 我将一组 servlet JSP 导入到 Oracle Workshop for Weblogic 中的一个项目中 page jsp 有以下导入语句 import com
  • SDN4 - Neo4j OGM + Jackson 2.0

    我尝试在 Spring Data Neo4j 4 0 0RC1 实体上使用 Jackson 2 x 注释 但在我的应用程序上下文启动中看到失败 我有两个 NodeEntities实现一个接口 我已经对接口进行了注释 JsonTypeInfo
  • KMLViewer Apple 的示例不起作用

    我一直在寻找问题的答案 但没有成功 所以就这样 KMLViewer Apple 的示例在某些情况下不起作用 执行自述文件步骤后 我尝试在葡萄牙里斯本和葡萄牙波尔图之间建立一条路线 最奇怪的事情发生了 注释已正确构建 尽管覆盖层 MKPoly
  • MVC Razor 中的 mailto 链接编码

    我有以下型号 public class EmailLinkModel public string mailbody get set public string emailSubject get set public string email
  • 如何在PowerDesigner中隐藏符号编号?

    在 Sybase PowerDesigner 中 当设计采用同一 XXXX 对象 即对象 的 2 个副本 实例的 UML 图时 应用程序会向该符号添加一个数字标识符 如 XXXX 2 可以去掉吗 提前致谢 这似乎不是直接可行的 但是 在 1
  • 与 .pull-right 一起使用时的 .img-responsive 中断

    我有一些图像 pull left and pull right将它们按照特定的模式对齐 我也在用 img responsive 图像如下所示 img src Images test modern jpg class pull right i
  • 使用数据流模型的T触发器

    我正在尝试模拟 t flipflop 的工作 timescale 1ns 1ps module t flipflop input t input clk input clear output q output qbar wire sbar
  • 通过 Jupyter Notebook 中的 shell 激活新的 Conda 环境

    我正在使用用 Python 3 编写的 Jupyter Notebook 并且我想从该 Notebook 中运行 Python 2 脚本 我想知道是否可以从笔记本中运行 Shell 命令 并让这些 Shell 命令在不同的环境下运行 例如
  • IMAGE:您可能需要适当的加载程序来处理此文件类型

    我不知道在 ReactJS webpack 中加载图像的正确加载器是什么 你可以帮我一下吗 我收到此错误 Module parse failed Users imac Desktop fakeeh imgs logo png Unexpec
  • 如何在Python中实现一个好的__hash__函数[重复]

    这个问题在这里已经有答案了 当实现具有多个属性的类时 如下面的玩具示例 处理散列的最佳方法是什么 我猜想 eq and hash 应该是一致的 但是如何实现一个能够处理所有属性的适当的哈希函数呢 class AClass def init
  • Laravel 调度程序 - 在特定时间运行每月的特定日期

    我想在每月的特定日期的特定时间运行任务 现在我使用此代码在该月的 1 号和 15 日运行任务 schedule gt command payments create gt daily gt when function days 1 15 t
  • 使用 Azure Windows 10 运行 Android 模拟器

    我正在尝试在运行 Windows Windows 10 Pro 版本 1809 的 azure VM 上运行 Android 模拟器 但运行 Android 模拟器时收到以下错误消息 C Program Files x86 Android
  • 如何在 Selenium Java 中转换 Katalon 脚本?

    据我们所知 Katalon 现在已经成为付费工具 因此我的 Katalon 脚本需要转换为 Selenium 和 Java 脚本 Katalon 脚本采用 Groovy 语言 使用 Katalon 内置库编写 对象保存在对象存储库中的 rs
  • 在 Pandas 多重索引内重新采样

    我有一些分层数据 这些数据从底部到时间序列数据 看起来像这样 df pandas DataFrame value a values a value b values b index states cities dates df index