【问题标题】:df.loc print wrong expected valuedf.loc 打印出错误的期望值
【发布时间】:2023-01-27 16:19:51
【问题描述】:

我有一个数据框:

    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行不包括在内?我试过其他范围,其中一些也没有达到预期的效果。这是索引的问题吗?

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:

    对我来说工作:

    df = df.loc[df['a'].str.extract('(d+)', expand=False).astype(float).between(52, 53) & 
                df['a'].str.match(r'Td+$'), 'd']
    print (df)
    25    0.35
    26    0.35
    28    0.30
    Name: d, dtype: float64
    

    【讨论】:

    • 从 T51 而不是 52 开始?如果我用我的方式编辑 T52 到 T51 是一样的
    【解决方案2】:

    between 不会为您提供这些值之间的行,它会为您提供这些值之间按字母顺序排列的行。赶紧跑

    df['a'].between('T52','T53') 
    

    并查看哪些行返回 True

    文档:https://pandas.pydata.org/docs/reference/api/pandas.Series.between.html

    有关相关示例,请参阅文档中的底部示例。

    【讨论】:

      【解决方案3】:
      df['a'].between('T52', 'T53')
      

      将检查a 中的每个值是否按字典顺序在T51T53 之间,与行的相对顺序无关

      你可能更想要:

      m = df['a'].isin(['T52', 'T53'])
      
      df[m.cummax() & m[::-1].cummax()]
      

      输出:

            a  b  c     d
      26  T52  5  4  0.35
      27  A53  4  4  0.30
      28  T53  4  4  0.30
      

      【讨论】:

        猜你喜欢
        • 2012-12-06
        • 2017-01-23
        • 1970-01-01
        • 2011-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多