gpt4 book ai didi

python - 从列表中过滤带有操作符链的 pandas

转载 作者:行者123 更新时间:2023-11-30 22:03:42 35 4
gpt4 key购买 nike

我有一个 pandas 表,其中包含一些列:

col_list = list('ABC')
df = pd.DataFrame(np.random.randint(10, size=(5,3)), columns=col_list)

A B C
0 8 5 7
1 5 4 1
2 7 5 6
3 6 6 0
4 3 4 1

我有一个阈值列表,我想根据这些阈值过滤 df:

thr = [3, 6, 9]

有没有办法根据thr中的相关阈值过滤每一列中的df,使得

new_df = df[(df['A']>thr[0]) & (df['B']>thr[1]) & (df['C']>thr[2]) )

没有使用运算符列表理解显式编写它,例如

not_sure = [df.iloc[:, [i]]>thr[i] for i in range(3)]

最佳答案

使用boolean indexing带有由 np.all 创建的 bool 掩码:

print (df)
A B C
0 5 8 10
1 5 4 1
2 7 5 6
3 6 6 0
4 3 4 1

thr = [3, 6, 9]

df = df[np.all(df.values > np.array(thr), axis=1)]
print (df)
A B C
0 5 8 10

Pandas 解决方案 DataFrame.gt (>)DataFrame.all :

df = df[df.gt(thr).all(axis=1)]
print (df)
A B C
0 5 8 10

以及列表理解的解决方案:

masks = [df.iloc[:, i] > j for i, j in enumerate(thr)]
df = df[pd.concat(masks, axis=1).all(axis=1)]

替代方案:

df = df[np.logical_and.reduce(masks)]
<小时/>

说明:

首先通过 np.array 比较所有值 - thr 和列的长度必须相同:

print (df.values > np.array(thr))
[[ True True True]
[ True False False]
[ True False False]
[ True False False]
[False False False]]

然后按 numpy.all 检查每行的所有 True :

print (np.all(df.values > np.array(thr), axis=1))
[ True False False False False]

关于python - 从列表中过滤带有操作符链的 pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53469035/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com