python - 如何在列的两个值之间选择数据框中的所有行
问题描述
我有一个这样的数据框:
import numpy as np
import pandas as pd
df=pd.DataFrame([['travail','hk','hj'],['test',6,6],[5,5,8],[4,3,1],['moyenne',5,6],[5,6,7],
[1,2,3],['travail','test','kkj'],[5,'hjjd',8],['moyenne',6,7],[5,5,8],[4,3,1],['hkk',5,6],[5,5,8],
[7,8,5]],columns=['A','B','C'])
我想选择 A 列之间travail
和moyennee
A 列中的所有行并获得:
A B C
0 travail hk hj
1 test 6 6
2 5 5 8
3 4 3 1
4 moyenne 5 6
7 travail test kkj
8 5 hjjd 8
9 moyenne 6 7
我怎样才能做到这一点?
解决方案
Series.eq
按( )比较列,按) 进行==
第二次更改排序,按( ) 再次Series.iloc
获取Series.cumsum
和比较,按位进行链掩码,最后按 过滤:Series.gt
>
&
AND
boolean indexing
m1 = df['A'].eq('travail').cumsum().gt(0)
m2 = df['A'].eq('moyenne').iloc[::-1].cumsum().gt(0)
df1 = df[m1 & m2]
print (df1)
A B C
0 travail hk hj
1 test 6 6
2 5 5 8
3 4 3 1
4 moyenne 5 6
5 5 6 7
6 1 2 3
7 travail test kkj
8 5 hjjd 8
9 moyenne 6 7
如果始终存在列中的两个值,A
则可以Series.idxmax
使用DataFrame.loc
:
a = df['A'].eq('travail').idxmax()
b = df['A'].eq('moyenne').iloc[::-1].idxmax()
df1 = df.loc[a:b]
推荐阅读
- algorithm - 使用欧几里得算法找到 2 个变量
- testing - 如何测试`if @generated` 的两边?
- java - 如何将 rgba 从数组转换为十六进制?
- javascript - 将临时分配给变量时异步函数的不同行为
- r - 有没有办法找到加载数据所花费的时间
- ruby - 如果在 Ruby on Rails 中针对多个值检查值 A 的条件,该怎么办?
- reactjs - 在 React 中使用 'for' 作为道具
- scrapy - 使用 Scrapy 获取 itune 播客数据
- javascript - Materializecss + Angular Cli - 选择组件未正确下拉
- c++ - 为什么我的 .exe 文件不能无故生成?