python dataframe索引筛选_python-Pandas DataFrame:查找两列相等/相同的特定长度序列的索引值...
我有一个熊猫DataFrame,其定义如下:
# -*- coding: utf-8 -*-
import datetime as dt
import pandas as pd
data = [[1, 1], [1, 1], [2, 2], [2, 2], [2, 2], [3, 3], [4, 4], [4, 4],
[4, 4], [5, 5], [5, 5]]
df = pd.DataFrame(data, columns=['A', 'B'])
df.index = pd.date_range(dt.datetime(2012, 1, 1), periods=len(df), freq='H')
print(df)
和产量:
A B
2012-01-01 00:00:00 1 1
2012-01-01 01:00:00 1 1
2012-01-01 02:00:00 2 2
2012-01-01 03:00:00 2 2
2012-01-01 04:00:00 2 2
2012-01-01 05:00:00 3 3
2012-01-01 06:00:00 4 4
2012-01-01 07:00:00 4 4
2012-01-01 08:00:00 4 4
2012-01-01 09:00:00 5 5
2012-01-01 10:00:00 5 5
现在,我试图获取A和B列相等且至少(或恰好也足够)A和B中n个连续行(此处为小时)相等的行的索引,即我想提取索引值在A和B相等的情况下,它们必须是连续的(长度大于等于= n的切片).
因此,在这种情况下,对于n = 2,它应该是“ twos”和“ fours”的索引:
2012-01-01 02:00:00
2012-01-01 03:00:00
2012-01-01 04:00:00
2012-01-01 06:00:00
2012-01-01 07:00:00
2012-01-01 08:00:00
仅获取A和B相等的行的索引很简单.
但是,如何仅获取n个连续的相等元素?
我想肯定有一些我目前看不到的花哨的groupby方法.
解决方法:
根据您的描述,我不清楚为什么1& 1.结果中将排除5个,因为它们每个都包含2个或多个连续的行,且A和A的值匹配. B.
但是,下面的解决方案仍然应该会有所帮助,并且我确定您可以对其进行修改以适合您的需求.它首先过滤数据帧以匹配A列和B列中的值(df_matching).然后,它使用移位累加模式将连续的匹配值分组,然后对n进行过滤.
n = 2
df_matching = df[df.A == df.B]
gb = df_matching.groupby((df_matching.A != df_matching.A.shift()).cumsum())
df_target = gb.filter(lambda x: len(x) >= n)
>>> df_target
A B
2012-01-01 00:00:00 1 1
2012-01-01 01:00:00 1 1
2012-01-01 02:00:00 2 2
2012-01-01 03:00:00 2 2
2012-01-01 04:00:00 2 2
2012-01-01 06:00:00 4 4
2012-01-01 07:00:00 4 4
2012-01-01 08:00:00 4 4
2012-01-01 09:00:00 5 5
2012-01-01 10:00:00 5 5
上面的数据框是为了确保它符合您的期望.然后只需提取索引:
>>> df_target.index
DatetimeIndex(['2012-01-01 00:00:00', '2012-01-01 01:00:00',
'2012-01-01 02:00:00', '2012-01-01 03:00:00',
'2012-01-01 04:00:00', '2012-01-01 06:00:00',
'2012-01-01 07:00:00', '2012-01-01 08:00:00',
'2012-01-01 09:00:00', '2012-01-01 10:00:00'],
dtype='datetime64[ns]', freq=None)
请注意,如果n = 3,您将获得预期的结果.
标签:pandas,python
来源: https://codeday.me/bug/20191111/2018349.html
python dataframe索引筛选_python-Pandas DataFrame:查找两列相等/相同的特定长度序列的索引值...相关推荐
- python dataframe loc函数_python pandas.DataFrame.loc函数使用详解
官方函数 DataFrame.loc Access a group of rows and columns by label(s) or a boolean array. .loc[] is prim ...
- python中cumsum函数_Python pandas.DataFrame.cumsum函数方法的使用
DataFrame.cumsum(self, axis=None, skipna=True, *args, **kwargs) 返回DataFrame或Series轴上的累计和. 返回包含累计和的相同 ...
- python dataframe 取一行_python – Pandas dataframe获取每个组的第一行
我有一个pandas DataFrame如下. df = pd.DataFrame({'id' : [1,1,1,2,2,3,3,3,3,4,4,5,6,6,6,7,7], 'value' : [&q ...
- python 列表多行_Python Pandas list列表数据列拆分成多行的方法实现
1.实现的效果 示例代码: df=pd.DataFrame({'A':[1,2],'B':[[1,2],[1,2]]}) df Out[458]: A B 0 1 [1, 2] 1 2 [1, 2] ...
- python如何输出两行_python pandas dataframe拆分行(某些行一行拆成多行)
简单循环 最简单的方式就是循环拆分一下呗.先上最简单方法:import pandas as pd df = pd.DataFrame({'A':['1','2','3'],'B':['1','2,3' ...
- python sum函数用法_Python pandas.DataFrame.sum函数方法的使用
DataFrame.sum(axis=None, skipna=None, level=None, numeric_only=None, min_count=0, **kwargs)[source] ...
- python中where函数_Python pandas.DataFrame.where函数方法的使用
DataFrame.where(cond, other=nan, inplace=False, axis=None, level=None, errors='raise', try_cast=Fals ...
- python中items函数_Python pandas.DataFrame.items函数方法的使用
DataFrame.items(self) [source] 迭代器遍历(列名,Series)对. 遍历DataFrame列,返回一个具有列名称和内容为Series的元组. Yields:label: ...
- python将ElasticSearch索引数据读入pandas dataframe实战
python将ElasticSearch索引数据读入pandas dataframe实战 # 导入基础包和库 import pandas as pdpd.set_option('display.max ...
最新文章
- powershell真香
- Lua学习笔记6:C++和Lua的相互调用
- 完美解决tar文件window解压问题
- Hive _函数(系统内置函数、自定义函数、自定义UDF函数)
- Error: no such column
- Java中9种IO的读取方式
- mysql port range_MySQL 数据库常见调优方法及参数设置_MySQL
- 【bzoj1951】【古代猪文】Lucas定理+欧拉定理+孙子定理
- 写口算用计算机作文600字,口算比赛作文600字
- 基于centos7和windows 搭建局域网wiki.js知识管理库的两种解决方案
- wannacry作者捉到了吗_WannaCry爆发的根源原来是它?
- 关于Data Matrix 基于ECC200标准的编码原理和相关开源代码
- 对不同角色用户设置不同的系统首页
- 计算机颜色显示器,电脑显示器怎么选,看这一篇就够了
- PAT 1066. Root of AVL Tree (25) 回レ!雪月AVL
- Python案例1—人民币与美元的汇率兑换V_3.0
- 刚学习阿里云VOD,获取视频播放地址
- Fruit Ripeness论文、代码和数据集汇总
- 修改Datagrip 2021.2.4 系统文件插件等目录的位置
- 强化学习-把元学习(Meta Learning)一点一点讲给你听