多索引数据框 pandas 中的操作

2024-02-23

我需要处理大数据 csv 中的地理和统计数据。它包含来自地理行政和地统计的数据。城市、区位、地统计基本区划和区块构成层次指标。

我必须为地理索引中数据的最大值的每个元素创建一个新列 ['data2'],并将每个块值除以该值。对于每个索引级别,索引级别值必须不为0,因为0索引级别值会考虑计算中未使用的其他类型的信息。

                       data1  data2
mun  loc  geo  block
1    0    0    0       20     20
1    1    0    0       10     10
1    1    1    0       10     10   
1    1    1    1       3      3/4
1    1    1    2       4      4/4
1    1    2    0       30     30   
1    1    2    1       1      1/3
1    1    2    2       3      3/3
1    2    1    1       10     10/12
1    2    1    2       12     12/12
2    1    1    1       123    123/123
2    1    1    2       7      7/123
2    1    2    1       6      6/6
2    1    2    2       1      1/6

有任何想法吗?我尝试过使用 for 循环,使用 reset_index() 转换列中的索引并按列和行值进行迭代,但计算会持续很长时间,我认为这不是执行此类操作的正确方法。

另外,如果我想要像这样得到我的面具,这样我就可以在每个级别上运行我的计算,该怎么办?

mun  loc  geo  block
1    0    0    0     False       
1    1    0    0     False       
1    1    1    0     True          
1    1    1    1     False        
1    1    1    2     False        
1    1    2    0     True          
1    1    2    1     False        
1    1    2    2     False        

mun  loc  geo  block
1    0    0    0     False       
1    1    0    0     True       
1    1    1    0     False          
1    1    1    1     False        
1    1    1    2     False
1    2    0    0     True
1    2    2    0     False          
1    2    2    1     False        

mun  loc  geo  block
1    0    0    0     True       
1    1    0    0     False       
1    1    1    0     False          
1    1    1    1     False        
1    1    1    2     False
2    0    0    0     True
2    1    1    0     False          
2    1    2    1     False   

您可以先创建mask from MultiIndex http://pandas.pydata.org/pandas-docs/stable/generated/pandas.MultiIndex.html, 与之比较0并检查至少一项True(最后一个0) by any http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.any.html:

mask = (pd.DataFrame(df.index.values.tolist(), index=df.index) == 0).any(axis=1)
print (mask)
mun  loc  geo  block
1    0    0    0         True
     1    0    0         True
          1    0         True
               1        False
               2        False
          2    0         True
               1        False
               2        False
     2    1    1        False
               2        False
2    1    1    1        False
               2        False
          2    1        False
               2        False
dtype: bool

然后得到max http://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.GroupBy.max.html值由groupby http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.groupby.html每个第一、第二和第三索引,但在过滤之前boolean indexing http://pandas.pydata.org/pandas-docs/stable/indexing.html#boolean-indexing只取不存在的值True in mask:

df1 = df.ix[~mask, 'data1'].groupby(level=['mun','loc','geo']).max()
print (df1)
mun  loc  geo
1    1    1        4
          2        3
     2    1       12
2    1    1      123
          2        6

Then reindex http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.reindex.html df1 by df.index,删除最后一层Multiindex by reset_index http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.reset_index.html, mask http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.mask.html没有改变的值mask(也有必要删除最后一级)和fillna http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.fillna.html by 1,因为除法返回相同的值。

df1 = df1.reindex(df.reset_index(level=3, drop=True).index)
         .mask(mask.reset_index(level=3, drop=True)).fillna(1)
print (df1)
Name: data1, dtype: int64
mun  loc  geo
1    0    0        1.0
     1    0        1.0
          1        1.0
          1        4.0
          1        4.0
          2        1.0
          2        3.0
          2        3.0
     2    1       12.0
          1       12.0
2    1    1      123.0
          1      123.0
          2        6.0
          2        6.0
Name: data1, dtype: float64

最后除以div http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.div.html:

print (df['data1'].div(df1.values,axis=0))
mun  loc  geo  block
1    0    0    0        20.000000
     1    0    0        10.000000
          1    0        10.000000
               1         0.750000
               2         1.000000
          2    0        30.000000
               1         0.333333
               2         1.000000
     2    1    1         0.833333
               2         1.000000
2    1    1    1         1.000000
               2         0.056911
          2    1         1.000000
               2         0.166667
dtype: float64
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多索引数据框 pandas 中的操作 的相关文章

随机推荐

  • 创建相对于 jetpack 中其他元素的垂直链组成 ConstraintLayout?

    我想使用 chainStyle Packed 将标题和描述文本链接到以图像为中心的位置 如何在 jetpack compose 中实现此目的 当我使用时createVerticalChain 它相对于父容器的创建链不是我想要的 有没有办法实
  • 使用 Visual Studio 2013 构建 64 位 Live555

    我正在尝试在 Windows 7 上使用 Visual Studio 2013 64 位构建 Live555 的组件 我尝试编辑 win32config 和 mak 文件 但没有成功 我已经在互联网上搜索了几个小时 并使用命令提示符尝试了各
  • 在 Code Igniter 2.02 中设置电子邮件

    我收到很多错误 我已经在不同的站点尝试了几个建议 删除了父函数 删除了数组 更新了我的 php ini 文件 但没有运气 这是我收到的 13 个错误中的第一个 遇到 PHP 错误 严重性 警告 消息 fsockopen function f
  • std::list 析构函数不阻塞

    我有一个多线程应用程序 有一个循环作为主线程等待用户输入 在正确的输入上 它应该停止循环并等待所有其他线程正确结束 为此 我创建了一个 std list 其中放置了为创建线程而创建的 std future 对象 std list
  • 如何在Silverlight中创建类似WPF的数据触发器?

    我如何为 Silverlight 数据网格创建一个触发器 其中单元格背景颜色根据单元格值而变化 我前段时间参与过一个 WPF 项目 我记得通过 xaml 中的 DataTriggers 实现这一点非常简单 然而 此功能似乎在 Silverl
  • 实体框架数据库第一次重新生成让我失去了手动更改

    我正在使用 MVC NET 制作一个网站 由于我是一名老派程序员 首先学习设计数据库 所以我选择了数据库优先方法 我还使用 代码生成 来创建具有扩展名的文件 tt 到目前为止 除了一件让我困扰的事情之外 一切都正常 经典场景 我意识到我缺少
  • 如何在类库项目中正确定义 DBContext?

    我正在使用实体框架 7 并创建了两个项目 一个项目是 ASP NET 5 Web API 项目 另一个是类库项目 包 我想在其中存储所有数据访问层逻辑 这样我就可以将此包用于另一个报告项目 并且我可能提供的其他附加服务 基本上 我在 Web
  • 假设自动线程化的 scipy 和 numpy 函数没有利用多核

    我正在运行 Mac OS X 10 6 8 并使用 Enthought Python 发行版 我希望 numpy 函数能够利用我的两个核心 我遇到了与这篇文章类似的问题 python numpy 中的多线程 blas https stack
  • Android getResources().getDrawable() 已弃用 API 22

    使用新的 Android API 22getResources getDrawable 现已弃用 现在最好的方法是只使用getDrawable 发生了什么变化 您可以选择一些选项来正确处理此弃用 并且未来证明 方式 具体取决于您正在加载哪种
  • QLineEdit 的背景图像

    如何设置背景图片QLineEdit 以下样式表不起作用 QLineEdit background image url images 13 png QLineEdit border 1px solid 000000 image work wi
  • 如何在Python中记录源文件名和行号

    是否可以装饰 扩展Python标准日志记录系统 以便在调用日志记录方法时它还记录文件和调用它的行号或者调用它的方法 当然 检查一下格式化程序 http docs python org library logging html formatt
  • Jenkins 多分支 - 如何扫描 jenkinsfile 放置在子模块上的分支?

    我有一个主存储库 其中包含一个子模块 其中包含 Jenkinsfile 有了这个 我想为该主存储库创建一个多分支管道作业 但这不起作用 当 Jenkinsfile 不在子模块中时它可以工作 但当 Jenkinsfile 位于子模块中时它不会
  • 在 HERE 地图中的标记上悬停时显示内容 Div

    我是这里的地图新手 需要在标记悬停时显示一个 div 我已经能够放置带有图标的标记 但现在需要显示带有一些额外信息的 div HERE 地图 API 是否提供此功能 任何文档 URL 或一段代码都将受到赞赏 注意 我正在使用 HERE 网络
  • 如何在 Twitter Bootstrap 中使用 CSS 将文本对齐到元素的中间?

    我在用引导程序 http twitter github com bootstrap javascript html alerts警报 这是我的成功警报消息 div class alert alert success a class clos
  • 调度程序未在 Spring Boot 中运行

    我创建了一个 Spring Boot 应用程序 我已经配置了包含调度程序方法的类startService 下面是我的代码 服务等级 package com mk service import org springframework bean
  • CSS 使文本左对齐并同时对齐

    有没有办法让文本左对齐并同时对齐 意思是左对齐之类的 有什么办法可以实现这一点吗 感谢帮助 您可能正在寻找最后一行的左对齐 text align justify text align last left
  • 如何让用户输入不区分大小写?

    我想创建一个函数来过滤我要打开的文件以及具体的月份和日期 这样 用户需要输入他们想要在哪个特定月份或日期分析哪个城市 文件 但是 我希望用户能够输入不区分大小写的内容 例如 用户可以输入 chicago CHICAGO ChIcAgO 它仍
  • 如何设置shell脚本的进程组

    如何设置shell脚本的进程组 我还希望所有子进程都位于同一个进程组中 我期望类似的东西setpgid in C As 普斯科西克指出 https stackoverflow com a 45112755在大多数 shell 中 通过激活作
  • 使用 WebFlux 的 Spring Boot 在测试中总是抛出 403 状态

    非常感谢您查看我的问题 我有一些奇怪的主题 我的 Spring Boot 测试不起作用 它们启动成功 但在向任何控制器发出请求时总是抛出 403 HTTP 状态 我有一些具有下一个依赖项的项目 buildscript ext kotlin
  • 多索引数据框 pandas 中的操作

    我需要处理大数据 csv 中的地理和统计数据 它包含来自地理行政和地统计的数据 城市 区位 地统计基本区划和区块构成层次指标 我必须为地理索引中数据的最大值的每个元素创建一个新列 data2 并将每个块值除以该值 对于每个索引级别 索引级别