【问题标题】:Print row ID at which all other row values are smaller than 0.05打印所有其他行值都小于 0.05 的行 ID
【发布时间】:2021-11-08 14:31:01
【问题描述】:

我有一个数据框,其中包含不同参数 (P1-P4) 的置信区间和每个模型评估的 ID。我想打印所有参数(行中)的值

数据框:

   ID    P1    P2    P3    P4
0   1  0.50  0.06  0.20  0.01
1   2  0.20  0.05  0.15  0.01
2   3  0.10  0.05  0.10  0.01
3   4  0.08  0.04  0.06  0.01
4   5  0.04  0.04  0.04  0.01
5   6  0.03  0.04  0.02  0.01

试用过的代码:

import pandas as pd
import numpy as np

df = pd.DataFrame({"ID": [1,2,3,4,5,6],
                   "P1": [0.50,0.20,0.10,0.08,0.04,0.03],
                   "P2": [0.06,0.05,0.05,0.04,0.04,0.04],
                   "P3": [0.20,0.15,0.10,0.06,0.04,0.02],
                   "P4": [0.01,0.01,0.01,0.01,0.01,0.01]})
print(df)

print(df[df.loc[:, ['P1', 'P2', 'P3', 'P4']] < 0.05].ID[0])
print(df[(df.loc[:,['P1','P2','P3','P4']] < 0.05), 'ID'])

打印语句的期望输出: 5

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以添加DataFrame.all 以测试Trues 是否在所有选定的列中,然后如果确定始终存在至少一个匹配的ID,则首先选择ID

    print(df.loc[df[['P1', 'P2', 'P3', 'P4']].lt(0.05).all(axis=1), 'ID'].iat[0])
    5
    

    如果不确定是否存在此值,请使用 nextiter trick

    print(next(iter(df.loc[df[['P1','P2','P3','P4']].lt(0.05).all(axis=1), 'ID']), 'no match'))
    5
    
    
    print(next(iter(df.loc[df[['P1','P2','P3','P4']].lt(0.005).all(axis=1), 'ID']), 'no match'))
    no match
    

    【讨论】:

      猜你喜欢
      • 2015-10-14
      • 2015-10-14
      • 2016-10-22
      • 1970-01-01
      • 2020-11-18
      • 1970-01-01
      • 2020-02-07
      • 2023-03-08
      • 1970-01-01
      相关资源
      最近更新 更多