我有这个数据框(缩短):
+-------+------------+--------+----------+-------+------+
| index | id_product | margin | supplier | price | seen |
+-------+------------+--------+----------+-------+------+
| 0 | 100000000 | 92.00 | 14 | 0.56 | 2 |
| 1 | 100000230 | 72.21 | 27 | 8.17 | 0 |
| 2 | 100001440 | 72.07 | 15 | 16.20 | 687 |
| 3 | 100002331 | 30.55 | 13 | 41.67 | 0 |
| 7 | 100001604 | 35.17 | 27 | 18.80 | 491 |
| ... | ... | ... | ... | ... | ... |
| 9830 | 100000320 | 77.78 | 18 | 13.33 | 0 |
| 9831 | 100000321 | 77.78 | 98 | 13.33 | 0 |
| 9832 | 100000443 | 77.78 | 17 | 13.33 | 4587 |
| 9834 | 100000292 | 88.13 | 3 | 10.56 | 0 |
| 9835 | 100000236 | 72.21 | 18 | 10.56 | 0 |
+-------+------------+--------+----------+-------+------+
我想做的是随机提取 3 行,使用df.sample(3)maybe,但条件如下:
选择的 3 行应该有 3个不同的ecom_id:(14,27,13) 好,(14,27,14) 不好。
具有较高边距的行应该享有特权。我用weights='margin',效果不错。
seen较低的行应该享有特权。是否可以使用 sample() 反转权重计数以优先考虑最低值?
应在 3 个不同的价格切片中找到 3 个选定行:第一个选定行的价格应小于 20.0,第二个选定行的价格应在 30 到 50 之间,最后第三个也是最后一个选定行的价格应 > 80。
这可能吗 ?
我尝试过类似的东西:
pr_1_pd = pr_pd.loc[pr_pd['price'] < 20]
pr_2_pd = pr_pd.loc[(pr_pd['price'] > 30) & (pr_pd['price'] < 50)]
pr_3_pd = pr_pd.loc[pr_pd['price'] > 80]
pr_1_pd = pr_1_pd.sort_values(by=['margin','seen'],ascending=[False,True])
pr_2_pd = pr_2_pd.sort_values(by=['margin','seen'],ascending=[False,True])
pr_3_pd = pr_3_pd.sort_values(by=['margin','seen'],ascending=[False,True])
但我不确定如何将所有过滤器组合在一起
慕尼黑的夜晚无繁华
相关分类