![](/img/trans.png)
[英]How to select rows in a DataFrame between two values, in Python Pandas?
[英]How to select all rows in a dataframe between two values of column
我有一个这样的数据框:
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
我怎样才能做到这一点?
通过Series.eq
( ==
) 比较列,通过 Series.iloc 进行第二次更改排序,获取Series.cumsum
并通过Series.iloc
( >
) 再次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]
可以使用带有iloc
的for
循环来检查每一行并将所需块中的行附加到新的空数据帧:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.