我有一个这样的数据框:
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
答案 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.idxmax
与DataFrame.loc
一起使用:
a = df['A'].eq('travail').idxmax()
b = df['A'].eq('moyenne').iloc[::-1].idxmax()
df1 = df.loc[a:b]
答案 1 :(得分:0)
可以将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,:])
循环来检查每一行并将所需块内的行追加到新的空数据帧:
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")