我有一个 Dataframe :
a b c d
0 M11 18 1 1.00
1 M11 17 1 1.00
2 M12 16 2 0.90
3 M12 15 2 0.90
4 S11 15 2 0.90
5 S2 13 3 0.85
6 M21 14 3 0.80
7 S21 14 3 0.80
8 M2 13 3 0.70
9 M22 12 3 0.70
10 S22 12 3 0.70
11 M31 11 4 0.65
12 S31 11 4 0.65
13 M3 10 4 0.60
14 A31 10 4 0.60
15 M32 9 4 0.55
16 S32 9 4 0.55
17 M41 8 4 0.50
18 S41 8 4 0.50
19 M42 7 4 0.45
20 S42 7 4 0.45
21 M43 6 4 0.40
22 S43 6 4 0.40
23 A51 5 4 0.35
24 A52 5 4 0.35
25 T51 5 4 0.35
26 T52 5 4 0.35
27 A53 4 4 0.30
28 T53 4 4 0.30
我想打印"a"列上特定值之间的"d"值
我试过了
df.loc[df['a'].between('T52', 'T53'), 'd']
在行'a' T52和T53之间打印'd'
我以为
26 0.35
27 0.30
28 0.30
但实际结果是
26 0.35
28 0.30
为什么第27行没有包括?我已经尝试了其他范围,其中一些也没有得到预期的结果.这是索引的问题吗?
3条答案
按热度按时间hc2pp10m1#
将检查
a
中的每个单个值是否按字典顺序介于T51
和T53
之间,而与行的相对顺序无关您可能希望:
输出:
中间体:
或者,如果多次出现T52/T53,并且希望每次出现之间的所有行,请用途:
输入示例:
输出:
dbf7pr2w2#
如果始终匹配数据中的
start
和end
值,则可以通过DataFrame.loc
进行过滤,并通过Series.idxmax
将开始值和结束值与第一个匹配值进行比较:qlzsbp2j3#
between并没有给出这些值之间的行,而是按字母顺序给出了这些值之间的行。
并查看哪些行返回True
文件:https://pandas.pydata.org/docs/reference/api/pandas.Series.between.html
参见文档中的底部示例以获得相关示例。