我有一个包含机器学习训练结果的大型数据集(约500万行)。现在我想检查结果是否达到"目标范围"。假设此范围包含-0.25
和+0.25
之间的所有值。如果在此范围内,则为Hit
,如果低于Low
,则为High
。
我现在会创建Hit,Low,High这三列,然后计算每一行的条件,在这列中放入一个1
,另外两个就变成0
,然后分组求和,但我怀疑一定有更好更快的方法,比如分组的时候直接计算。
数据
import pandas as pd
df = pd.DataFrame({"Type":["RF", "RF", "RF", "MLP", "MLP", "MLP"], "Value":[-1.5,-0.1,1.7,0.2,-0.7,-0.6]})
+----+--------+---------+
| | Type | Value |
|----+--------+---------|
| 0 | RF | -1.5 | <- Low
| 1 | RF | -0.1 | <- Hit
| 2 | RF | 1.7 | <- High
| 3 | MLP | 0.2 | <- Hit
| 4 | MLP | -0.7 | <- Low
| 5 | MLP | -0.6 | <- Low
+----+--------+---------+
预期输出
pd.DataFrame({"Type":["RF", "MLP"], "Low":[1,2], "Hit":[1,1], "High":[1,0]})
+----+--------+-------+-------+--------+
| | Type | Low | Hit | High |
|----+--------+-------+-------+--------|
| 0 | RF | 1 | 1 | 1 |
| 1 | MLP | 2 | 1 | 0 |
+----+--------+-------+-------+--------+
6条答案
按热度按时间jaql4c8m1#
您可以使用
cut
定义组,使用pivot_table
重塑形状:或者
crosstab
:输出:
6mzjoqzu2#
你可以先用
np.select
再用crosstab
cwdobuhd3#
你可以试试这个:
q0qdq0h24#
hgc7kmma5#
结果
ymzxtsji6#
下面是使用
pd.cut()
和.str.get_dummies()
的方法输出: