首页 > 解决方案 > 如何在列的两个值之间选择数据框中的所有行

问题描述

我有一个这样的数据框:

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 列之间travailmoyenneeA 列中的所有行并获得:

         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

我怎样才能做到这一点?

标签: pythonpandasnumpy

解决方案


Series.eq按( )比较列,按) 进行==第二次更改排序,按( ) 再次Series.iloc获取Series.cumsum和比较,按位进行链掩码,最后按 过滤:Series.gt>&ANDboolean 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]

推荐阅读