对唯一顺序索引的多索引 pandas 数据帧进行切片和赋值

2024-04-22

我想选择并更改数据框单元格的值。该数据帧使用了 2 个索引:“datetime”和“idx”。两者都包含唯一且连续的标签。 “datetime”索引具有日期时间类型的日期时间标签,“idx”具有整数值标签。

import numpy as np
import pandas as pd

dt = pd.date_range("2010-10-01 00:00:00", periods=5, freq='H')
d = {'datetime': dt, 'a': np.arange(len(dt))-1,'b':np.arange(len(dt))+1}
df = pd.DataFrame(data=d)
df.set_index(keys='datetime',inplace=True,drop=True)
df.sort_index(axis=0,level='datetime',ascending=False,inplace=True)

df.loc[:,'idx'] = np.arange(0, len(df),1)+5
df.set_index('idx',drop=True,inplace=True,append=True)
print(df)

'这是数据框:

                         a  b
datetime            idx      
2010-10-01 04:00:00 5    3  5
2010-10-01 03:00:00 6    2  4
2010-10-01 02:00:00 7    1  3
2010-10-01 01:00:00 8    0  2
2010-10-01 00:00:00 9   -1  1

'假设我想获取 idx=5 的行。我怎么做?我可以用这个:

print(df.iloc[0])

然后我会得到以下结果:

a    3
b    5
Name: (2010-10-01 04:00:00, 5), dtype: int32

但我想访问并设置值在此单元格中,idx=5,column='a',通过指定 idx 值和列名“a”。我怎么做?

请指教。


您可以使用DataFrame.query() http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.query.html查询MultiIndex DF的方法:

In [54]: df
Out[54]:
                         a  b
datetime            idx
2010-10-01 04:00:00 5    3  5
2010-10-01 03:00:00 6    2  4
2010-10-01 02:00:00 7    1  3
2010-10-01 01:00:00 8    0  2
2010-10-01 00:00:00 9   -1  1

In [55]: df.query('idx==5')
Out[55]:
                         a  b
datetime            idx
2010-10-01 04:00:00 5    3  5

In [56]: df.query('idx==5')['a']
Out[56]:
datetime             idx
2010-10-01 04:00:00  5      3
Name: a, dtype: int32

或者你可以使用DataFrame.eval() http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.eval.html如果您需要设置/更新某些单元格,请使用以下方法:

In [61]: df.loc[df.eval('idx==5'), 'a'] = 100

In [62]: df
Out[62]:
                           a  b
datetime            idx
2010-10-01 04:00:00 5    100  5
2010-10-01 03:00:00 6      2  4
2010-10-01 02:00:00 7      1  3
2010-10-01 01:00:00 8      0  2
2010-10-01 00:00:00 9     -1  1

解释:

In [59]: df.eval('idx==5')
Out[59]:
datetime             idx
2010-10-01 04:00:00  5       True
2010-10-01 03:00:00  6      False
2010-10-01 02:00:00  7      False
2010-10-01 01:00:00  8      False
2010-10-01 00:00:00  9      False
dtype: bool

In [60]: df.loc[df.eval('idx==5')]
Out[60]:
                         a  b
datetime            idx
2010-10-01 04:00:00 5    3  5

PS如果你原来的MultiIndex没有名称,你可以使用轻松设置它们重命名_轴() http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.rename_axis.html method:

df.rename_axis(('datetime','idx')).query(...)

替代(有点贵)的解决方案 - 使用sort_index() + pd.IndexSlice[]:

In [106]: df.loc[pd.IndexSlice[:,5], ['a']]
...
skipped
...
KeyError: 'MultiIndex Slicing requires the index to be fully lexsorted tuple len (2), lexsort depth (0)'

所以我们需要首先对索引进行排序:

In [107]: df.sort_index().loc[pd.IndexSlice[:,5], ['a']]
Out[107]:
                         a
datetime            idx
2010-10-01 04:00:00 5    3
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对唯一顺序索引的多索引 pandas 数据帧进行切片和赋值 的相关文章

随机推荐

  • C# 如何计算出对象的哈希码?

    这个问题来自于讨论tuples https stackoverflow com questions 101825 whats the best way of using a pair triple etc of values as one
  • 如何检查 MySQL 和 Tomcat 是否正在运行?

    我创建了一个 Java 应用程序 该应用程序分为不同的子组件 每个子组件都在单独的 Tomcat 实例上运行 此外 某些组件通过 Hibernate 使用 MySQL 数据库 我现在正在创建一个管理控制台 在其中报告所有 Tomcat 实例
  • 使用 ashx 处理程序显示图像

    我的 aspx 页面中有以下图像 td td
  • Glassfish 和 JBoss 5 的现实比较?

    在现实世界中有人有这两种经历吗 它们在性能 内存使用 速度等 方面如何比较 稳定 JBoss Seam 在 Glassfish 上运行良好吗 从我自己的经历来看 有几点 GlassFish 拥有更好的管理控制台 JBoss 有三个控制台 每
  • 从 PyQt GUI 连接到串行

    我编写了一个程序来从串行发送和接收数据 但是我有一个问题 我想创建一个函数 connect 或一个类 当我按下按钮时 该函数就会被执行 但是如果我创建 MainWindow 类中的这个函数 TestThread 类中的变量 ser 未初始化
  • 错误:EBADF,使用永远的 nohup 运行节点时错误的文件描述符

    我在运行小型 Web 服务器 从文件系统提供文件 时遇到 Node js 问题 当开始时node server js它的工作方式就像一个魅力 但是当用 nohup 或永远的 Node js 启动它时找不到文件 这对我有用 nohup nod
  • 如何 grep 查找同一行中存在的两个单词? [复制]

    这个问题在这里已经有答案了 如何 grep 查找包含两个输入单词的行 我正在寻找包含这两个单词的行 我该怎么做 我尝试过这样的管道 grep c word1 grep r word2 logs 它只是在第一个管道命令之后卡住了 Why 为什
  • 关于使用 playframework 实现购物车的建议

    我正在学习使用playframework通过编写代码来实现webstore用于销售物品 我已经实施了Admin区域使用crud and secure模块 现在 我想创建一个shopping cart用户可以向其中添加商品并继续结账 我对电子
  • 如何更改 codeigniter 中显示的错误

    The URI you submitted has disallowed characters 我该如何拦截这个错误 他们是一个callback 功能 当我尝试在 URL 中使用 时 会发生此错误 例如 我输入 1 1 我得到这个错误 我想
  • ios5 - 带有故事板的模态视图控制器的大小

    有没有什么方法可以调整使用故事板segue以模态方式呈现的视图控制器的大小 如何通过翻转过渡从该模态视图控制器中呈现另一个视图控制器 如果我将其定义为 Style Modal Presentation Default Transition
  • hibernate是否支持count(*) over()

    我试图避免必须为计数创建一个单独的查询 为实际查询创建一个单独的查询 我发现 SessionImpl createQuery 需要相当多的时间来执行复杂的查询 通过将 count 和主查询结合起来 我可以消除一个 createQuery 调
  • 我们如何修复透明/半透明可组合项上的材质阴影故障?

    如果您还不知道 Android 的材质阴影存在一个缺陷 即材质设计及其表面 照明和高度概念带来的阴影 另外 如果您不知道 Compose 使用许多与View框架 包括那些负责所述阴影的框架 因此它具有与View是的 至少现在是这样 Card
  • 将数据传递到startup.cs

    如何将数据传递到startup cs 这是用于集成测试使用WebHostBuilder and TestServer 我需要根据测试夹具传递不同的数据 因此 例如 不想从配置文件中提取它 数据将提供给startup cs中注册的中间件 文档
  • 使用 Python Pandas 使用每日数据计算月平均值

    我有一个包含四列的文本文件 年 月 日和雪深 这是 1979 年至 2009 年 30 年期间的每日数据 我想使用 pandas 计算 360 个 30 年 X 12 个月 个人月平均值 即隔离 1979 年 1 月 1979 年 2 月
  • 页面速度洞察删除 Google Recaptcha 未使用的 JavaScript

    我有一个网站在 Google Page Speed Insights 上得分很高 但它显示了一个性能问题 并显示此文件的 删除未使用的 JavaScript https www gstatic com recaptcha releases
  • 填充网格的最小矩形区域数

    假设我们有一个网格 并且希望使用尽可能少的颜色 每个区域一种颜色 在其上绘制矩形区域 有一些单元格已经被涂成黑色并且无法被涂掉 有没有多项式算法可以解决这个问题 经过测试 我发现这种情况的解决方案是9 因为我们需要9种不同的颜色来绘制填充整
  • 保持 GridView 中的图像处于选中状态

    我做了什么 大家好 我有一个 GrindView 我填充了我的数据库 现在图像显示在那里并且可以滚动 但是当我点击它时 它们不会保持选中状态 为了查看选择了哪张图片 我构建了一条 Toastmessage 它显示了我使用 onIemClic
  • 如何计算两个整数的相似度?

    其实很难描述 我想实现一种算法 该算法可以逐个比较两个给定整数 数字 具有相同 长度 的相同位置的数字 当我在基于 10 的系统中进行计算时 它是相同的 十的幂 它应该返回平等等级 如下所示 4491 和 1020 0 4491 和 412
  • 需要 div 来填充两个 div 之间的间隙

    给定以下 HTML div div header div div content div div footer div div 以及以下 CSS wrapper min height 100 position relative margin
  • 对唯一顺序索引的多索引 pandas 数据帧进行切片和赋值

    我想选择并更改数据框单元格的值 该数据帧使用了 2 个索引 datetime 和 idx 两者都包含唯一且连续的标签 datetime 索引具有日期时间类型的日期时间标签 idx 具有整数值标签 import numpy as np imp