OHEを扱っていないことに注意してください。 + stack
+ get_dummies
+ sum
str.split
を使用
オプション1
。
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
reset_index
続いastype
を用いてさらにつべこべ、:
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 Lol dude ...彼らは' \ 'なしでもっと悪く見えます:p –