pandas 从数据框创建特征矩阵

vsikbqxv  于 2022-11-05  发布在  其他
关注(0)|答案(2)|浏览(187)

我想把一个 Dataframe 转换成一个特征矩阵(实际上,我不确定它是否被称为特征矩阵)。
第一个
我想创建一个矩阵,以汽车和颜色作为索引和列,其中True或1表示可能的组合,如下所示:

Color   Audit   Chrysler  Toyota
0   blue    0   1     0
1   red 1   0     1
2   silver  0   1     1

我可以创建一个矩阵,然后遍历行并输入值,但这需要相当长的时间。有没有更好的方法来创建这个矩阵?
谨致问候,史蒂芬

j9per5c4

j9per5c41#

pivot_table似乎适用于以下情况:

df.pivot_table(index="Car", columns="Color", aggfunc=len)

其给出:

Color       blue    red     silver
Car         
Audi        NaN     1.0     NaN
Chrysler    2.0     NaN     1.0
Toyota      NaN     1.0     1.0

您可以将垂直组件指定为索引列(Car),将水平组件指定为列组件(Color),然后提供一个函数来填充单元格(len)。
然后,为了使它更细微一些,您可以使用fillna()将空单元格“涂”上零,并应用逻辑测试来显示哪些是“可能的”。
例如:

df.pivot_table(index="Car", columns="Color", aggfunc=len).fillna(0)>0

其给出:

Color       blue    red     silver
Car         
Audi        False   True    False
Chrysler    True    False   True
Toyota      False   True    True

作为最后一点润色,在从here中学习了它之后,您可以运行applymap来获得0,1输出:

(df.pivot_table(index="Car", columns="Color", aggfunc=len).fillna(0)>0).applymap(lambda x : 1 if x==True else 0)

赠送:

Color       blue    red     silver
Car         
Audi        0       1       0
Chrysler    1       0       1
Toyota      0       1       1

最后,这个过程有时在文献中被称为One Hot Encoding,并且有一些很酷的实现,如this one from sklearn,如果您的研究将您引向这个方向的话。

eivgtgni

eivgtgni2#

下面的代码将对托马斯的答案进行扩展,它将在输出中给予您所希望的内容

import pandas as pd

df = pd.DataFrame({'Car': ['Audi', 'Toyota', 'Chrysler', 'Toyota', 'Chrysler', 'Chrysler'], 
                   'Color': ['red', 'red', 'blue', 'silver', 'blue', 'silver']})

output = (df.pivot_table(index="Car", columns="Color", aggfunc=len).fillna(0).T > 0).astype(int)
print(output)

Car     Audi  Chrysler  Toyota
Color                         
blue       0         1       0
red        1         0       1
silver     0         1       1

相关问题