python 查找至少有一个行值大于0.7且所有其他行值小于0.3的列

tzdcorbm  于 2023-03-28  发布在  Python
关注(0)|答案(4)|浏览(96)

我有一个 Dataframe :

df = pd.DataFrame({
    'col1': [0.1, 0.8, 0.2, 0.12],
    'col2': [0.2, 0.9, 0.1, 0.1],
    'col3': [0.3, 0.2, 0.1, 0.2],
    'col4': [0.6, 0.7, 0.8, 0.9]
})

   col1  col2  col3  col4
0  0.10   0.2   0.3   0.6
1  0.80   0.9   0.2   0.7
2  0.20   0.1   0.1   0.8
3  0.12   0.1   0.2   0.9

我想找到那些列值,其中至少有一个行值大于0.7,其余的都小于0.3。在上面的代码片段中,结果应该是:

['col1', 'col2']

我试过下面的代码:

selected_cols = []
for col in df.columns:
    values = df[col]
    if any(values > 0.7) and all(values < 0.3):
        selected_cols.append(col)

print(selected_cols)
vcirk6k6

vcirk6k61#

试试看:

x = (df > 0.7).sum()
y = (df < 0.3).sum()
z = (x == 1) & (y == len(df) - 1)

print(z[z].index.to_list())

图纸:

['col1', 'col2']
aiqt4smr

aiqt4smr2#

使用列表理解

[df.columns[i] for i,v in enumerate(np.transpose(df.values)) if sum(v > 0.7) == 1 and (sum(v < 0.3) == (df.shape[0] - 1))]
nhjlsmyf

nhjlsmyf3#

您可以:

m1 = df.gt(0.7)
m2 = df.lt(0.3)
m1count = df[m1].count()
m2count = df[m2].count()
s = m1count.ge(1) & m2count.eq(len(df)-m1count)
s[s]

输出:

col1    True
col2    True
gmxoilav

gmxoilav4#

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'col1': [0.1, 0.8, 0.2, 0.12],
    'col2': [0.2, 0.9, 0.1, 0.1],
    'col3': [0.3, 0.2, 0.1, 0.2],
    'col4': [0.6, 0.7, 0.8, 0.9]
})

r = df.loc[:, ( df.apply(lambda c:np.select([c<0.3, c>0.7], [0, 1], -1).sum())
                  .ge(1)
                  )]

print(r)
col1  col2
0  0.10   0.2
1  0.80   0.9
2  0.20   0.1
3  0.12   0.1

如果你只想要列的名字,只需要:

print(r.columns.tolist())
# ['col1', 'col2']

相关问题