删除具有重复索引的 pandas 行

2024-04-18

如何删除具有重复索引值的行?

在下面的天气数据框中,有时科学家会返回并纠正观察结果 - 不是通过编辑错误的行,而是通过将重复的行附加到文件末尾。

我正在从网络上读取一些自动天气数据(每 5 分钟进行一次观测,并编译成每个气象站的每月文件。)解析文件后,DataFrame 如下所示:

                      Sta  Precip1hr  Precip5min  Temp  DewPnt  WindSpd  WindDir  AtmPress
Date                                                                                      
2001-01-01 00:00:00  KPDX          0           0     4       3        0        0     30.31
2001-01-01 00:05:00  KPDX          0           0     4       3        0        0     30.30
2001-01-01 00:10:00  KPDX          0           0     4       3        4       80     30.30
2001-01-01 00:15:00  KPDX          0           0     3       2        5       90     30.30
2001-01-01 00:20:00  KPDX          0           0     3       2       10      110     30.28

重复案例示例:

import pandas as pd
import datetime

startdate = datetime.datetime(2001, 1, 1, 0, 0)
enddate = datetime.datetime(2001, 1, 1, 5, 0)
index = pd.date_range(start=startdate, end=enddate, freq='H')
data1 = {'A' : range(6), 'B' : range(6)}
data2 = {'A' : [20, -30, 40], 'B' : [-50, 60, -70]}
df1 = pd.DataFrame(data=data1, index=index)
df2 = pd.DataFrame(data=data2, index=index[:3])
df3 = df2.append(df1)

df3
                       A   B
2001-01-01 00:00:00   20 -50
2001-01-01 01:00:00  -30  60
2001-01-01 02:00:00   40 -70
2001-01-01 03:00:00    3   3
2001-01-01 04:00:00    4   4
2001-01-01 05:00:00    5   5
2001-01-01 00:00:00    0   0
2001-01-01 01:00:00    1   1
2001-01-01 02:00:00    2   2

所以我需要df3最终成为:

                       A   B
2001-01-01 00:00:00    0   0
2001-01-01 01:00:00    1   1
2001-01-01 02:00:00    2   2
2001-01-01 03:00:00    3   3
2001-01-01 04:00:00    4   4
2001-01-01 05:00:00    5   5

我认为添加一列行号(df3['rownum'] = range(df3.shape[0]))将帮助我选择最底行的任何值DatetimeIndex,但我一直在弄清楚group_by or pivot(或???)声明来使其发挥作用。


我建议使用重复的 http://pandas.pydata.org/pandas-docs/version/0.17.1/generated/pandas.Index.duplicated.htmlPandas 索引本身的方法:

df3 = df3[~df3.index.duplicated(keep='first')]

虽然所有其他方法都有效,.drop_duplicates对于所提供的示例来说,这是迄今为止性能最低的。此外,虽然分组方法 https://stackoverflow.com/a/13036848/3622349只是性能稍差一些,我发现重复的方法更具可读性。

使用提供的示例数据:

>>> %timeit df3.reset_index().drop_duplicates(subset='index', keep='first').set_index('index')
1000 loops, best of 3: 1.54 ms per loop

>>> %timeit df3.groupby(df3.index).first()
1000 loops, best of 3: 580 µs per loop

>>> %timeit df3[~df3.index.duplicated(keep='first')]
1000 loops, best of 3: 307 µs per loop

请注意,您可以通过将 keep 参数更改为来保留最后一个元素'last'.

还应该注意的是,该方法适用于MultiIndex以及(使用 df1 中指定的保罗的例子 https://stackoverflow.com/a/13036848/3622349):

>>> %timeit df1.groupby(level=df1.index.names).last()
1000 loops, best of 3: 771 µs per loop

>>> %timeit df1[~df1.index.duplicated(keep='last')]
1000 loops, best of 3: 365 µs per loop
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

删除具有重复索引的 pandas 行 的相关文章

随机推荐

  • C# LINQ to SQL:重构此通用 GetByID 方法

    我写了下面的方法 public T GetByID int id var dbcontext DB var table dbcontext GetTable
  • GCC 为 AVR 上的简单 ISR 生成不必要的寄存器推送

    我有一些简单的 C 程序 如果使用 g 编译 它会生成以下汇编文本 唯一的说法是sbi 这不会影响任何状态标志 我想知道为什么 G 会产生这些无用的推送 弹出r0 and r1 global vector 14 type vector 14
  • Rust 中带有纯宏的函数组合链

    我读了 如何在 Rust 中编写函数 https stackoverflow com questions 45786955 how to compose functions in rust Rust 中的函数组合链 https stacko
  • D3 强制定向图 ajax 更新

    我使用 d3 js 和 jquery 以及 PHP 后端 基于 yii 框架 来创建动态力定向图来表示我们使用 Nagios 监控的网络上主机和服务的当前状态 该图显示根 gt 主机组 gt 主机 gt 服务 我创建了一个服务器端函数来返回
  • 使用 onSubmit 提交表单

    My form onSubmit正在呼叫 onsubmit validate this return false validate 如下 function validate obj ajax url ajax validate check
  • logback 支持 log4j 附加程序吗?

    为 log4j 创建的自定义 Appender 扩展 AppenderSkeleton 可以与 new 一起使用吗logback框架 我知道logback带有自己的一组类似于 log4j 的附加程序 但这是否可以重用现有的附加程序 如何 以
  • signal(SIGCHLD, SIG_DFL); 是什么意思?意思是?

    我不处理SIGCHLD在我的代码中 我的进程仍然在终止后立即被删除 我希望它成为僵尸进程 如果我设置SIGCHLD to SIG DFL那么 它会起作用吗 我该如何设置SIGCHLD to SIG DFL 我希望进程成为僵尸 这样我就可以在
  • 尝试调用虚拟方法“int java.lang.String.hashCode()”

    我正在尝试使用 Volley Library 将图像从 URL 加载到 gridview 中 为此我正在关注this http www 101apps co za index php articles using volley to dow
  • 使用 javascript 的 ASP.Net MVC 3.0 Ajax.ActionLink 动态对象路由值

    0 项目 在我看来 我有一个隐藏字段 其中有一个UserID 该用户 ID 是根据操作生成的 因此事先不会知道 一旦这个隐藏字段有了值 我想使用该值作为操作链接路由值 我可以用 jquery 选择器来做到这一点吗 我的隐藏字段是
  • 我可以使用远程数据库服务器配置 ssl

    我想知道是否可以在我的应用程序和远程数据库服务器之间配置 ssl Weblogic 服务器上的 Oracle 数据库和 Web 应用程序 Thanks 是的 这是可能的 我不确定如何配置服务器 我只从客户端的角度使用它 但是可以按照链接中的
  • ejabberd 和 Erlang 安装,lager_transform 未定义

    我是 Erlang 新手 我一直在尝试在 EC2 ubuntu 机器上安装 Erlang 和 ejabberd 一切都很顺利 直到我开始编译一些外部模块ejabberd 它开始抛出错误undefined parse transform la
  • 从雅虎财经提取数据时出错

    我正在尝试通过 Pandas 从雅虎财经提取数据 我以前使用过类似的拉力 但在此之前没有遇到任何问题 import pandas as pd import numpy as np import datetime as dt from dat
  • Postgis - ST_within 没有做我想做的事。如何在空心区域中找到一个点?

    请参阅丝网印刷 我在 Postgis 中运行了一个空间查询 以返回地图上某个点所在的选区 区域 该查询使用ST within函数 其中点位于多边形内 正如您从打印中看到的 该点实际上并不在 York Outer 的多边形区域 内 尽管从技术
  • php中如何将多维关联数组转换为一维数组?

    我有一个快速查询如何将多维数组转换为一维数组 teachers array array post id gt John Doe video id gt array Government English array post id gt St
  • 在Android studio中添加外部库

    我想添加外部库https github com foursquare foursquare android oauth https github com foursquare foursquare android oauth到我的 Andr
  • 更改my.ini后MySQL服务无法启动

    我在 Windows 上运行 MySQL 8 0 我对 my ini 做了一些更改 最终找到了它 以更改字符集 愚蠢的是我没有先备份它 并且我使用了记事本 它没有多重撤消功能 现在我明白了 The MySQL Service could n
  • Kivy 中的 HTTPS 请求

    我一直在处理与通过 AWS API Gateway 托管的 API 绑定的 Kivy 应用程序中的 HTTPS 请求 首先 我从Python3迁移到2 然后从requests库迁移到kivy的URLRequest 该应用程序在我的 Linu
  • prawnto 显示新页面时不会中断的表格

    我有数量可变的表 行数可变 我想让它们一个接一个地显示 但如果当前页面不适合表 请将其放在下一页上 然后继续 我已将表格放入事务中 这样如果高度适合当前页面 我可以回滚然后打印它 但如何获取表格高度 我现在有这个代码 pdf transac
  • 将 CSV 导入组织模式属性

    我想将 CSV 导入组织模式 其他人已经询问过如何将 CSV 导入组织模式表 这不是我想做的 我需要将 CSV 导入到组织模式属性 例如 像这样的 CSV Name Tel Mobile Fax John 11111 22222 33333
  • 删除具有重复索引的 pandas 行

    如何删除具有重复索引值的行 在下面的天气数据框中 有时科学家会返回并纠正观察结果 不是通过编辑错误的行 而是通过将重复的行附加到文件末尾 我正在从网络上读取一些自动天气数据 每 5 分钟进行一次观测 并编译成每个气象站的每月文件 解析文件后