是否有一种简洁的方法来生成此数据帧掩码?

时间:2019-12-12 13:32:36

标签: python pandas

我有一个模型为scoreorder_amount_bucket的pandas DataFrame。订单金额存储区中有8个垃圾箱,每个垃圾箱都有不同的阈值。我想过滤框架并生成一个布尔掩码,显示通过哪些行。

我可以通过详尽列出条件来做到这一点,但我觉得必须有一种更Python的方式来做到这一点。

到目前为止,我是如何完成此工作的一个小示例(为简单起见,仅提供3个垃圾箱)。

import pandas as pd

sc = 'score'
amt = 'order_amount_bucket'
example_data = {sc:[0.5, 0.8, 0.99, 0.95, 0.8,0.8],
                amt: [1, 2, 2, 2, 3, 1]}

thresholds = [0.7, 0.8, 0.9]

df = pd.DataFrame(example_data)

# the exhaustive method to create the pass mask
# is there a better way to do this part?
pass_mask = (((df[amt]==1) & (df[sc]<thresholds[0]))
            |((df[amt]==2) & (df[sc]<thresholds[1]))
            |((df[amt]==3) & (df[sc]<thresholds[2]))
            )

pass_mask.values
>> array([ True, False, False, False,  True, False])

1 个答案:

答案 0 :(得分:2)

您可以将thresholds隐藏到dict并使用Series.map

d = dict(enumerate(thresholds, 1))

# d: {1: 0.7, 2: 0.8, 3: 0.9}

pass_mark = df['order_amount_bucket'].map(d) > df['score']

[出]

print(pass_mark.values)
array([ True, False, False, False,  True, False])