使用 pandas 查找事件和非事件率
Find event and non-event rate using pandas
我有一个如下所示的数据框
import numpy as np
import pandas as pd
np.random.seed(100)
df = pd.DataFrame({'grade': np.random.choice(list('ABCD'),size=(20)),
'dash': np.random.choice(list('PQRS'),size=(20)),
'dumeel': np.random.choice(list('QWER'),size=(20)),
'dumma': np.random.choice((1234),size=(20)),
'target': np.random.choice([0,1],size=(20))
})
我想做以下事情
a) event rate
- 为每个输入分类列
中的每个唯一值计算 1s
(来自目标列)的出现百分比
b) non event rate
- 计算每个输入分类列
中每个唯一值的 0s
(来自目标列)的出现百分比
我尝试了以下
input_category_columns = df.select_dtypes(include='object')
df_rate_calc = pd.DataFrame()
for ip in input_category_columns:
feature,target = ip,'target'
df_rate_calc['col_name'] = (pd.crosstab(df[feature],df[target],normalize='columns'))
我想在一百万行上执行此操作,如果有任何有效的方法,那真的很有帮助
我希望我的输出如下所示。我只显示了两列,但我想为所有分类列生成此输出
这是一种方法:
- Select 分类列 (
cols
)
Melt
以 target
作为 id 变量和 cols
作为值变量的数据框
- 将数据帧分组并使用
value_counts
计算频率
Unstack
重塑数据框
cols = df.select_dtypes('object')
df_out = (
df.melt('target', cols)
.groupby(['variable', 'target'])['value']
.value_counts(normalize=True)
.unstack(1, fill_value=0)
)
print(df_out)
target 0 1
variable value
dash P 0.4 0.3
Q 0.2 0.3
R 0.2 0.1
S 0.2 0.3
dumeel E 0.2 0.2
Q 0.1 0.0
R 0.4 0.6
W 0.3 0.2
grade A 0.4 0.2
B 0.0 0.2
C 0.4 0.3
D 0.2 0.3
我有一个如下所示的数据框
import numpy as np
import pandas as pd
np.random.seed(100)
df = pd.DataFrame({'grade': np.random.choice(list('ABCD'),size=(20)),
'dash': np.random.choice(list('PQRS'),size=(20)),
'dumeel': np.random.choice(list('QWER'),size=(20)),
'dumma': np.random.choice((1234),size=(20)),
'target': np.random.choice([0,1],size=(20))
})
我想做以下事情
a) event rate
- 为每个输入分类列
1s
(来自目标列)的出现百分比
b) non event rate
- 计算每个输入分类列
0s
(来自目标列)的出现百分比
我尝试了以下
input_category_columns = df.select_dtypes(include='object')
df_rate_calc = pd.DataFrame()
for ip in input_category_columns:
feature,target = ip,'target'
df_rate_calc['col_name'] = (pd.crosstab(df[feature],df[target],normalize='columns'))
我想在一百万行上执行此操作,如果有任何有效的方法,那真的很有帮助
我希望我的输出如下所示。我只显示了两列,但我想为所有分类列生成此输出
这是一种方法:
- Select 分类列 (
cols
) Melt
以target
作为 id 变量和cols
作为值变量的数据框- 将数据帧分组并使用
value_counts
计算频率 Unstack
重塑数据框
cols = df.select_dtypes('object')
df_out = (
df.melt('target', cols)
.groupby(['variable', 'target'])['value']
.value_counts(normalize=True)
.unstack(1, fill_value=0)
)
print(df_out)
target 0 1
variable value
dash P 0.4 0.3
Q 0.2 0.3
R 0.2 0.1
S 0.2 0.3
dumeel E 0.2 0.2
Q 0.1 0.0
R 0.4 0.6
W 0.3 0.2
grade A 0.4 0.2
B 0.0 0.2
C 0.4 0.3
D 0.2 0.3