請注意,您並未處理OHE。
選項1
使用str.split
+ stack
+ get_dummies
+ sum
。
df = pd.DataFrame(data)
print(df)
mesh
0 A, B, C
1 C,B
2
df = df.mesh.str.split('\s*,\s*', expand=True)\
.stack().str.get_dummies().sum(level=0)
print(df)
A B C
0 1 1 1
1 0 1 1
2 0 0 0
選項2
apply
+ value_counts
。我從Bharath Shetty那裏學到了一點小技巧。
df = df.mesh.str.split('\s*,\s*', expand=True)\
.apply(pd.Series.value_counts, 1).iloc[:, 1:].fillna(0)
print(df)
A B C
0 1.0 1.0 1.0
1 0.0 1.0 1.0
2 0.0 0.0 0.0
此外挑剔,使用astype
,隨後reset_index
:
df = df.astype(int).reset_index()
print(df)
index A B C
0 0 1 1 1
1 1 0 1 1
2 2 0 0 0
選項3
pd.crosstab
x = df.mesh.str.split('\s*,\s*', expand=True).stack()
df = pd.crosstab(x.index.get_level_values(0), x.values).iloc[:, 1:]
print(df)
col_0 A B C
row_0
0 1 1 1
1 0 1 1
2 0 0 0
''\''線continuati在角色和那個縮進 - 我的眼睛! –
你是如此之快發佈選項真的很好。現在這是'piR-esque' – Dark
@JonClements哈哈老兄......他們看起來更糟,沒有'\':p –