我想將資料框轉換為特征矩陣(實際上,我不確定它是否稱為特征矩陣)。
df = pd.DataFrame({'Car': ['Audi', 'Toyota', 'Chrysler', 'Toyota', 'Chrysler', 'Chrysler'],
'Color': ['red', 'red', 'blue', 'silver', 'blue', 'silver']})
Car Color
0 Audi red
1 Toyota red
2 Chrysler blue
3 Toyota silver
4 Chrysler blue
5 Chrysler silver
我想創建一個矩陣,其中汽車和顏色作為索引和列,其中 aTrue或 1 顯示可能的組合,如下所示:
Color Audit Chrysler Toyota
0 blue 0 1 0
1 red 1 0 1
2 silver 0 1 1
我可以創建一個矩陣,然后遍歷行并輸入值,但這需要很長時間。有沒有更好的方法來創建這個矩陣?
親切的問候,斯蒂芬
uj5u.com熱心網友回復:
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
作為最后一點潤色,從這里了解了它,你可以運行 anapplymap來獲得你的 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,并且有一些很酷的實作,例如sklearn的這個實作,以防您的調查將您引向那個方向。
uj5u.com熱心網友回復:
作為 Thomas 答案的擴展,下面的代碼應該在輸出中給出你想要的
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/527454.html
標籤:熊猫数据框矩阵
