我正在嘗試將一列拆分Class為多列并基于此更改列名。
ID Name Class
0 12 John A
1 13 Mark A
2 14 Tony B
3 15 Marcus C
4 16 Phill D
5 17 Jack A
最終的df
ID Name Class A B C D
0 12 John A A
1 13 Mark A A
2 14 Tony B B
3 15 Marcus C C
4 16 Phill D D
5 17 Jack A A
uj5u.com熱心網友回復:
import numpy as np
uniq_class = df['Class'].unique().tolist()
# create a diagonal matrix with unique class as value
D = np.diag(uniq_class).tolist()
# map the diagonal matrix dictionary for each class value
temp = dict(zip(uniq_class, D))
# map class values to the temp dictionary
df[uniq_class] = df['Class'].map(temp).tolist()
df
輸出:
ID Name Class A B C D
0 12 John A A
1 13 Mark A A
2 14 Tony B B
3 15 Marcus C C
4 16 Phill D D
5 17 Jack A A
uj5u.com熱心網友回復:
執行此操作的一種可能較慢的方法是定義一個函式,然后回圈遍歷原始列中每個專案的所有可能答案。
#define a function to see if matched value
def new_column_val(row, value, column):
if row[column] == value:
return value
else:
return None
#create the new columns
for class_name in df["class"].unique():
df[class] = df.apply(new_column_val, args = (class_name, "class")
uj5u.com熱心網友回復:
你可以使用 get_dummies:
mask=pd.get_dummies(df.Class).replace(1,np.nan)
for col in mask.columns:
mask[col].fillna(col, inplace=True)
final=df.join(mask.replace(0,np.nan))
final
ID Name Class A B C D
0 12 John A A
1 13 Mark A A
2 14 Tony B B
3 15 Marcus C C
4 16 Phill D D
5 17 Jack A A
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/533464.html
