如何在列的两个值之间选择数据框中的所有行

时间:2019-04-17 08:36:40

标签: python pandas numpy

我有一个这样的数据框:

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     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

2 个答案:

答案 0 :(得分:0)

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.idxmaxDataFrame.loc一起使用:

a = df['A'].eq('travail').idxmax()
b = df['A'].eq('moyenne').iloc[::-1].idxmax()

df1 = df.loc[a:b]

答案 1 :(得分:0)

可以将foriloc一起使用newdf = pd.DataFrame(columns=df.columns) flag = False for i in range(len(df)): firstval = df.iloc[i,0] if firstval == 'travail': newdf = newdf.append(df.iloc[i,:]) flag = True elif firstval == 'moyenne': newdf = newdf.append(df.iloc[i,:]) flag = False elif flag==True: newdf = newdf.append(df.iloc[i,:]) 循环来检查每一行并将所需块内的行追加到新的空数据帧:

         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

输出:

#pragma comment(lib, "Logger")