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

2024-09-28 05:16:02 发布

您现在位置: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列中travailmoyennee之间的所有行并获得:

         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

我该怎么做?你知道吗


Tags: 数据testimportnumpypandasdfasnp
2条回答

可以使用for循环和iloc检查每一行,并将所需块中的行附加到新的空数据帧:

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,:])
print(newdf)

输出:

         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

^{}==)比较列,按^{}比较第二次更改顺序,获取^{},然后按^{}>)再次比较,按&&AND^{}按^{最后筛选:

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中的两个值,则可以将^{}^{}一起使用:

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

df1 = df.loc[a:b]

相关问题 更多 >

    热门问题