在Pandas DataFrame
中,如何以序数数字形式表示分类特征(例如,当天是工作日还是周末)的列(例如,1表示工作日,2表示周末)进行转换,使其以分类方式表示值,工作日为(0,1),周末为(1,0),因此值不具有可比性?
还有使用pd.get_dummies
(或OneHotEncoder
)的替代方法,它会创建两个0和1的列,然后合并元组中的两列,但是没有直接的方式这样做?
实施例: 我有:
datetime temp daytype
0 2011-01-01 9.84 2
1 2011-01-02 9.02 2
2 2011-01-03 9.02 1
3 2011-01-04 9.84 1
4 2011-01-05 9.84 1
5 2011-01-06 9.84 1
我想:
datetime temp daytype
0 2011-01-01 9.84 (1, 0)
1 2011-01-02 9.02 (1, 0)
2 2011-01-03 9.02 (0, 1)
3 2011-01-04 9.84 (0, 1)
4 2011-01-05 9.84 (0, 1)
5 2011-01-06 9.84 (0, 1)
(我开始认为也许我错了 - 这不是表示分类值的默认方式吗?)
答案 0 :(得分:2)
以下是一种方法:df['daytype'] = df['daytype'].apply(lambda x : (1, 0) if x == 2 else (0,1))
答案 1 :(得分:1)
你可以创建你的假人/一个热矢量,然后将它们组合成一个元组:
您的原始数据看起来像这样
import pandas as pd
df = pd.DataFrame({"daytype": [2, 2, 1, 1, 1, 2]})
print(df)
daytype
0 2
1 2
2 1
3 1
4 1
5 2
我们可以创建虚拟变量,正如您正确指出的那样,将产生单独的列:
dummies = pd.get_dummies(df["daytype"]).astype(int)
print(dummies)
1 2
0 0 1
1 0 1
2 1 0
3 1 0
4 1 0
5 0 1
但是,您可以将这些单独的列并将它们压缩在一起,并将结果作为原始列中的列分配:
df["combined"] = list(zip(dummies[1], dummies[2]))
给你:
print(df)
daytype combined
0 2 (0, 1)
1 2 (0, 1)
2 1 (1, 0)
3 1 (1, 0)
4 1 (1, 0)
5 2 (0, 1)
当然,如果你愿意的话,你可以完全用组合替换原始列,我为了清晰起见将它们分开
以上内容将为您提供原始问题中所需的结果,但您也可以直接设置评论中提到的特定列的类型:
df['daytype'] = df['daytype'].astype('category')
最终,它将归结为您希望使用该列进行的操作