对 pandas MultiIndex 数据帧进行重新采样

2024-01-01

我有一个类似于以下内容的 pandas MultiIndex 数据框:

import pandas as pd

rows = [('One', 'One', 'One', '20120105', 1, 'Text1'),
        ('One', 'One', 'One', '20120107', 2, 'Text2'),
        ('One', 'One', 'One', '20120110', 3, 'Text3'),
        ('One', 'One', 'Two', '20120104', 4, 'Text4'),
        ('One', 'Two', 'One', '20120109', 5, 'Text5'),
        ('Two', 'Three', 'Four', '20120111', 6, 'Text6')]
cols = ['Type', 'Subtype', 'Subsubtype', 'Date', 'Number', 'Text']
df = pd.DataFrame.from_records(rows, columns=cols)
df['Date'] = pd.to_datetime(df['Date'])
df = df.set_index(['Type', 'Subtype', 'Subsubtype'])
end_date = max(df['Date'])
print(df)

                              Date  Number   Text
Type Subtype Subsubtype                          
One  One     One        2012-01-05       1  Text1
             One        2012-01-07       2  Text2
             One        2012-01-10       3  Text3
             Two        2012-01-04       4  Text4
     Two     One        2012-01-09       5  Text5
Two  Three   Four       2012-01-11       6  Text6

我想对数据进行上采样,以便 Type-Subtype-Subsubtype 索引的每个组合都能获取每日日期数据:从数据可用的最小日期到 end_date = max(df['Date'])。

我想要的一个例子:

                              Date  Number   Text
Type Subtype Subsubtype                          
One  One     One        2012-01-05       1  Text1
             One        2012-01-06       1  Text2
             One        2012-01-07       2  Text2
             One        2012-01-08       2  Text2
             One        2012-01-09       2  Text2
             One        2012-01-10       3  Text3
             One        2012-01-11       3  Text3
             Two        2012-01-04       4  Text4
             Two        2012-01-05       4  Text4
             Two        2012-01-06       4  Text4
             Two        2012-01-07       4  Text4
             Two        2012-01-08       4  Text4
             Two        2012-01-09       4  Text4
             Two        2012-01-10       4  Text4
             Two        2012-01-11       4  Text4
     Two     One        2012-01-09       5  Text5
             One        2012-01-10       5  Text5
             One        2012-01-11       5  Text5
Two  Three   Four       2012-01-11       6  Text6

浏览类似的问题,我找不到任何可以工作的东西。任何帮助是极大的赞赏。


您可以使用:

  • groupby http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.groupby.html由各个级别的Multiindex
  • apply http://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.GroupBy.apply.html reindex http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.reindex.html by date_range http://pandas.pydata.org/pandas-docs/stable/generated/pandas.date_range.html with iat http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.iat.html用于选择第一个值
  • replace NaN by ffill http://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.DataFrameGroupBy.ffill.html

df = df.groupby(level=[0,1,2]) \
       .apply(lambda x: x.set_index('Date').reindex(pd.date_range(x['Date'].iat[0], 
                                                                  end_date))).ffill()
print (df)
                                    Number   Text
Type Subtype Subsubtype                          
One  One     One        2012-01-05     1.0  Text1
                        2012-01-06     1.0  Text1
                        2012-01-07     2.0  Text2
                        2012-01-08     2.0  Text2
                        2012-01-09     2.0  Text2
                        2012-01-10     3.0  Text3
                        2012-01-11     3.0  Text3
             Two        2012-01-04     4.0  Text4
                        2012-01-05     4.0  Text4
                        2012-01-06     4.0  Text4
                        2012-01-07     4.0  Text4
                        2012-01-08     4.0  Text4
                        2012-01-09     4.0  Text4
                        2012-01-10     4.0  Text4
                        2012-01-11     4.0  Text4
     Two     One        2012-01-09     5.0  Text5
                        2012-01-10     5.0  Text5
                        2012-01-11     5.0  Text5
Two  Three   Four       2012-01-11     6.0  Text6
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对 pandas MultiIndex 数据帧进行重新采样 的相关文章

随机推荐

  • 基于 Term 的对象化数组

    我有这个数组 ary1d new Size Sym ArySym Ary functor Ary ArySym Size forall arg X Ary nb setarg X Ary Sym ary1d get Pos Ary Val
  • 为什么 cin 命令在缓冲区中留下“\n”?

    这与 cin 和 getline 跳过输入 https stackoverflow com questions 10553597 cin and getline skipping input但他们没有回答为什么会发生这种情况 只是回答如何解
  • Eclipse (STS)、Maven 和 maven-minify-plugin,它们可以一起工作吗?

    我正在做一个项目 负责 html css 和 javascript 我找到了这个maven minify 插件 http code google com p maven samaxes plugin这似乎正是我想要的 当我在服务器上使用 m
  • 计算多个字符串列中字符串的出现次数

    我有一个名为的数据框df看起来与此类似 除了 mat deliv 列的数量上升到 mat deliv 8 之外 还有数百个客户端和许多其他列Client ID and mat deliv 1 我在这里简化了它 Client ID mat d
  • int x = 'fooo' 是编译器扩展吗?

    我见过并使用过如下的 C 代码 int myFourcc ABCD 它可以在最新版本的 GCC 中运行 不确定有多新 标准中有此功能吗 这叫什么 我在网上搜索它时遇到了困难 EDIT 我也为未来的观察者找到了此信息 from 海湾合作委员会
  • Helm 图表如何具有值包含 {{ }} 的属性

    在 Helm Chart 中 我们可以将 value 定义为类似 Values name 的形式 它将被 Values yaml 中定义的实际值替换 但是 如果原始值具有类似的格式 例如 name 则在尝试安装该图表时 会由于 name 未
  • 将对象数组转换为对象值数组

    我正在尝试转换这个数组 let orders amount 100 user admin date March 6 2019 amount 120 user admin date March 6 2019 amount 80 user ad
  • 我可以通过编程方式控制 .NET Core 程序集重定向吗?

    问题 NET Core 2 0 netstandard 2 0 中是否有任何方法可以应用给定中未定义的程序集重定向application exe config运行可执行文件时的文件 也许某种编程方式 或者甚至通过使用一些特殊设置 标志运行可
  • 你可以同时运行 Coldfusion 和 PHP [重复]

    这个问题在这里已经有答案了 可能的重复 是否可以在同一服务器和网站上运行 Coldfusion 和 PHP https stackoverflow com questions 2444598 is is possible to run co
  • iOS 上的 Firebase Crashlytics 设置?

    我正在尝试集成 Firebase崩溃解决方案进入 iOS 我的应用程序 该应用程序启用了 Firebase 崩溃报告 我已按照文档进行操作here https firebase google com docs crashlytics upg
  • 老问题,如何确定不规则形状中的点?

    我学习 Html5 Canvas 有几个星期了 但是上面的问题困扰了我很长时间 不规则的形状 可能是圆形 矩形 椭圆形 多边形 或者由一些直线和贝塞尔曲线构造的路径 我找到了一些针对某些形状的算法 例如圆形 矩形和多边形 但是 如果我在画布
  • 带有打字稿的 nextjs API,将 NextApiRequest 查询参数限制为字符串类型[重复]

    这个问题在这里已经有答案了 在这个端点处理程序中 有没有办法限制req query在 NextJS 中NextApiRequest只是string类型而不是string string 例如 someQueryParam这里是string s
  • 内核模块如何卸载自身而不在内核日志中生成错误?

    我制作了一个简单的模块 可以在加载时打印 GDT 和 IDT 当它完成工作后 就不再需要它并且可以卸载 但如果它返回负数以停止加载 insmod会抱怨 并且错误消息将记录在内核日志中 内核模块如何优雅地卸载自身 据我所知 使用库存内核是不可
  • 如何设计系统以允许加密迁移?

    我想建立一个系统 允许我将加密密码 哈希密码 从一个系统迁移到另一个系统 我该怎么做 比如说 2 个月后 我发现了一种加密方法 其性能提高了 10 倍 并且当前的哈希函数已被毫无疑问地证明是完全脆弱的 我将如何将用户密码从一种哈希类型迁移到
  • 如何注释 EJS 代码(JS 节点)而不出现错误

    我在 EJS 文件中有以下代码 table tr td td td td tr table 当我这样评论的时候
  • 获取数字的 CastError NaN

    我收到这个错误 CastError Cast to Number failed for value NaN at path area message Cast to Number failed for value NaN at path a
  • 带有 CSS 的纹理文本?

    我目前正在开发一个简单的页面 有谁知道有什么方法可以将纹理图像覆盖在文本上吗 目前的规格似乎不可能 但请告诉我这是否可能 谢谢并保重 不知道为什么没有人回答这个问题 这可以使用background clip https codepen io
  • 指定 Tkinter 文本框的尺寸(以像素为单位)

    如何使用像素指定 Tkinter 文本框的尺寸 我不想改变字体大小 我用它来帮助我将其缩放到窗口的大小 您可以通过将其放入框架内 通过停用尺寸传播并配置条目以粘贴到框架边框来强制框架为固定尺寸来实现此目的 pack 也应该以类似的方式工作
  • 屏幕上和变量中的调用表达式输出

    我正在尝试存储来自的输出Invoke expression到变量以及屏幕上 我有 PS 日志记录 它会自动将所有内容记录为Write Host在一个文件中 现在我正在使用Invoke Expression这似乎要么在屏幕上打印输出 要么打印
  • 对 pandas MultiIndex 数据帧进行重新采样

    我有一个类似于以下内容的 pandas MultiIndex 数据框 import pandas as pd rows One One One 20120105 1 Text1 One One One 20120107 2 Text2 On