我有这样一个数据集:
import pandas as pd
pd.DataFrame({"A": [2, 2, 1, 0, 5, 3, 0, 4, 5], "B": [1, 0, 0, 0, 1, 1, 1, 0, 0]})
A B
0 2 1
1 2 0
2 1 0
3 0 0
4 5 1
5 3 1
6 0 1
7 4 0
(我知道A在0和5之间;B仅为0或1)
我想将其转换为:
A0_B0 A1_B0 A2_B0 A3_B0 ... A5_B1
0 0 0 0 0 ...
1 0 0 1 0 ...
2 0 1 0 0 ...
...
(知道哪列对应哪种组合很重要)
使用可与sklearn管道和/或sklearn数据帧映射器集成的方法(需要在测试样本上可复制)
目前,我已经尝试使用OneHotEncoder或LabelBinarizer,但它们适用于A或B列,而不混合它们
我还尝试使用自定义转换器手动创建它,但DataFrameMapper丢失了列名:
from sklearn.base import BaseEstimator, TransformerMixin
class ABTransformer(BaseEstimator, TransformerMixin):
def fit(self, x, y=None):
return self
def transform(self, x):
A = x.A
B = x.B
A0_B0 = np.logical_and((A==0), (B == 0))
A1_B0 = np.logical_and((A==1), (B == 0))
...
data = pd.DataFrame(np.stack((A0_B0, A1_B0,.... ), axis=1),
columns=["A0_B0", "A1_B0", ...]
)
return data
mapper = DataFrameMapper([
(["A", "B"], [ABTransformer()] , {'input_df':True, "alias": None}),
],
df_out=True, sparse=False)
最后,我得到的数据被标记为:“A\u B\u 0”、“A\u B\u 1”等
有没有办法达到预期的产出
假设列A和B的不同值的数目分别为
n_A
和n_B
,并且所有值都表示为基于零的整数,那么可以使用以下转换函数相关问题 更多 >
编程相关推荐