Pandas:从多索引中的日期中选择

2024-01-07

假设我有 MultiIndex 系列

date        foo
2006-01-01  1         12931926.310
            3         11084049.460
            5         10812205.359
            7          9031510.239
            9          5324054.903
2007-01-01  1         11086082.624
            3         12028419.560
            5         11957253.031
            7         10643307.061
            9          6034854.915

如果它不是 MultiIndex,我可以选择带有年份的那些2007通过df.loc['2007']。我在这里该怎么做?我的自然猜测是df.loc['2007', :],但这给了我一个空的Series([], name: FINLWT21, dtype: float64).

最终目标

最终,我也有兴趣替换不同日期的所有行2007与年份的行2007.

也就是说,我的预期输出是

date        foo
2006-01-01  1         11086082.624
            3         12028419.560
            5         11957253.031
            7         10643307.061
            9          6034854.915
2007-01-01  1         11086082.624
            3         12028419.560
            5         11957253.031
            7         10643307.061
            9          6034854.915

我尝试实施@unutbu的解决方案,但是

mySeries.loc[dateIndex.year != 2007] = mySeries.loc[dateIndex.year == 2007]

自然会将这些值(由于 RHS 上不存在)设置为NaN。通常,这些问题可以通过以下方式解决

mySeries.loc[dateIndex.year != 2007] = mySeries.loc[dateIndex.year == 2007].values

,但考虑到我有10值(以及我的真实数据集中的更多值)位于左侧,但仅5在右边,我得到

ValueError: cannot set using a list-like indexer with a different length than the value

现在我想到的唯一选择是迭代第一个索引,然后对每个子组使用前面的命令,但这似乎不是最有效的解决方案。


鉴于该系列

In [207]: series
Out[212]: 
date        foo
2006-01-01  1      12931926.310
            3      11084049.460
            5      10812205.359
            7       9031510.239
            9       5324054.903
2007-01-01  1      11086082.624
            3      12028419.560
            5      11957253.031
            7      10643307.061
            9       6034854.915
Name: val, dtype: float64

你可以提取date索引与

dateindex = series.index.get_level_values('date')
# Ensure the dateindex is a DatetimeIndex (as opposed to a plain Index)
dateindex = pd.DatetimeIndex(dateindex)

现在可以选择年份等于 2007 的行 布尔条件:

# select rows where year equals 2007
series2007 = series.loc[dateindex.year == 2007]

If the foo每个日期的值以相同的顺序循环使用相同的值, 那么您可以将系列中的所有值替换为 2007 年的值

N = len(series)/len(series2007)
series[:] = np.tile(series.loc[dateindex.year == 2007].values, N)

使用的优点np.tile and .values是它会相对快速地生成所需的值数组。一个(可能的)缺点是,这忽略了索引,因此它依赖于以下假设:foo对于每个日期,值以相同的顺序循环使用相同的值。

更稳健(但更慢)的方法是使用联接:

df = series.reset_index('date')
df2007 = df.loc[dateindex.year==2007]
df = df.join(df2007, rsuffix='_2007')
df = df[['date', 'val_2007']]
df = df.set_index(['date'], append=True)
df = df.swaplevel(0,1).sort_index()     

yields

In [304]: df.swaplevel(0,1).sort_index()
Out[304]: 
                    val_2007
date       foo              
2006-01-01 1    11086082.624
           3    12028419.560
           5    11957253.031
           7    10643307.061
           9     6034854.915
2007-01-01 1    11086082.624
           3    12028419.560
           5    11957253.031
           7    10643307.061
           9     6034854.915
2008-01-01 1    11086082.624
           3    12028419.560
           5    11957253.031
           7    10643307.061
           9     6034854.915
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas:从多索引中的日期中选择 的相关文章

随机推荐

  • 在 DB2 中显示表的定义

    大家好 我正在学习DB2 想知道如何 创建表后查看表的特征 类似于MySQL中的EXPLAIN TABLE命令 谢谢 此外DESCRIBE TABLE 您可以使用下面的命令 DESCRIBE INDEXES FOR TABLE tablen
  • 发送多个 HTTP 请求

    我需要编写使用项目 ID 查找有关项目的信息的程序 该 API 一次仅获取一项 因此我只能对每项执行一次查询 API 仅限于五个同时请求 任何额外的结果都会给出 HTTP 429 错误 如果有一个 JavaScript 对象 其中包含所有带
  • WordPress:重置密码始终无效密钥

    我有一个很大的问题 找不到解决方案 我已经安装了 Ultimate Member Plugin 并激活了它 当我现在重置用户的密码时 我会从我的页面收到一封电子邮件 其中包含在class password phpUM函数调用触发的插件文件u
  • ember.js 中是否有一个回调,我可以在状态转换后渲染所有视图后使用它来运行代码?

    我有由三个出口组成的应用程序视图 提出自己的观点 简化
  • 为什么 CSS :not 伪类不能按预期工作?

    考虑以下 HTML div class a div class b Hello div div div class c div class b World div div 按照预期添加以下 CSS 颜色 仅 世界 为红色 c b color
  • 将输入文本字段从 HTML 获取到 JavaScript 并转到 URL

    如何将输入文本字段从 HTML 转换为 JavaScript 并转到 URL 我正在构建一个网页 您可以在输入字段中输入一些单词 Java 会获取该字符串并检查该字符串是否与另一个字符串相等 如果它转到某个 URL 我的代码是
  • Android 相机视频意图返回 null URI

    我最近更新到了 Android 4 3 每当我从应用程序中使用 Intent 启动它时 库存摄像机就开始表现得有点奇怪 起初它只是崩溃并说 图库停止响应 过了一会儿 我能够录制视频 但是单击 完成 会向我的应用程序返回一个空 URI 这导致
  • Perl 中的编译时间和运行时间

    我在读这个文件 http oreilly com catalog pperl3 chapter ch18 html了解 Perl 程序的生命周期 When do run时间和什么时候做compile在命令行上运行 Perl 脚本时发生时间事
  • 几秒钟后清除通知

    当您打开消息活动并且手机收到新消息时 状态栏上会显示一条通知 短时间后 通知将被删除 是否可以对我的活动执行相同的操作 而不使用计时器在几秒钟后清除通知 我不相信有一种方法可以仅使用NotificationManager来取消通知 但您可以
  • Jboss as 7 使用 HTTP 管理 api 进行部署

    如何使用 HTTP 管理 api 将存档部署到 Jboss as 7 我尝试使用从 RHQ 插件类创建的以下代码 公共类Main2 public static final String MANAGEMENT management publi
  • 硬盘序列号可以/为什么会改变

    我们的反盗版软件根据硬盘序列号来识别人员 我相信这是一个恒定的功能 除非用户更改其主要物理驱动器 否则不会改变 如果我错了 请纠正我 我们使用WMIpython模块获取用户的硬盘序列号 我们的 2 台测试计算机的硬盘序列号已更改 但我们根本
  • 为什么我们必须定义一个在类中初始化的 const 静态成员

    我们知道 可以在类结构内部初始化整型 const 静态成员 这在初始化后在类结构中使用常量时很有用 例如 它可以用作 int 数组的大小 看下面的代码 class MyClass static const int num 100 int e
  • 多个线程在同一全局内存位置写入相同的值

    这个问题与以下问题密切相关this one https stackoverflow com questions 8315931 does writing the same value to the same memory location
  • 在文本区域内建议/自动完成的 jQuery 插件 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有一个 jQuery 插件可以在文本区域内建议 自动完成 我想要的是在文本区域中向用户提供建议的单
  • 现代 C 和 C++ 中是否已弃用 f(void)? [复制]

    这个问题在这里已经有答案了 我目前正在重构 整理 C 项目中使用的一些旧 C 代码 并经常看到以下函数 int f void 我倾向于写成 int f 是否有任何理由不在整个代码库中将 void 替换为 以提高一致性 或者两者之间是否存在我
  • 如何使用 cassandra-cli 更新 gc_grace_seconds?

    更新列族并更改其列族的命令是什么gc grace seconds价值利用cassandra cli 对于CQLSH alter table
  • 为反应式管道编写方面

    我正在为返回承诺的方法编写方面 考虑以下方法 public Mono
  • 更新现有的 JobDataMap

    我有一份已经安排好的 Quartz 工作 我想更新与之关联的 JobDataMap 如果我得到一个 JobDataMapJobDataMap jobDataMap scheduler getJobDetail getJobDataMap 那
  • 防止 window.open 聚焦

    我想使用 window open 在 Google Chrome 的新选项卡中打开页面 但我不希望该窗口在打开后获得焦点 而是留在后台 这可能吗 它只需要在 Google Chrome 上运行 它还可以使用 Google Chrome 扩展
  • Pandas:从多索引中的日期中选择

    假设我有 MultiIndex 系列 date foo 2006 01 01 1 12931926 310 3 11084049 460 5 10812205 359 7 9031510 239 9 5324054 903 2007 01