#get columns not contains/and set index
cols = df.columns[~df.columns.str.contains('/')].tolist()
df = df.set_index(cols)
print (df)
North/South East/West No1/No2/No3
Name
ABC 0/1 0/0 10/3/6
XYZ 1/0 0/1 4/5/6
PQR 1/0 0/1 3/6/6
#create new columns names
c = df.columns.to_series().str.split('/', expand=True).stack().values.tolist()
print (c)
['North', 'South', 'East', 'West', 'No1', 'No2', 'No3']
#list comprehension with split to df and concat output
df = pd.concat([df[x].str.split('/', expand=True) for x in df], axis=1)
print (df)
0 1 0 1 0 1 2
Name
ABC 0 1 0 0 10 3 6
XYZ 1 0 0 1 4 5 6
PQR 1 0 0 1 3 6 6
#assign new columns names
df.columns = c
df = df.reset_index()
print (df)
Name North South East West No1 No2 No3
0 ABC 0 1 0 0 10 3 6
1 XYZ 1 0 0 1 4 5 6
2 PQR 1 0 0 1 3 6 6
타이밍 :
df = pd.concat([df]*1000).reset_index(drop=True)
print (df)
def f(df):
return pd.concat([s.str.split('/').apply(pd.Series, index=c.split('/')) for c, s in df.set_index('Name').iteritems()], axis=1).reset_index()
print (f(df))
def f1(df):
cols = df.columns[~df.columns.str.contains('/')].tolist()
df = df.set_index(cols)
c = df.columns.to_series().str.split('/', expand=True).stack().values.tolist()
df = pd.concat([df[x].str.split('/', expand=True) for x in df], axis=1)
df.columns = c
return df.reset_index()
print (f1(df))
In [142]: %timeit (f(df))
1 loop, best of 3: 2.6 s per loop
In [143]: %timeit (f1(df))
10 loops, best of 3: 27.5 ms per loop
감사합니다. 나는 그것을 실행하는 몇 가지 문제가 있습니다. df = df.set_index (cols)로 df를 변경했다고 생각합니다. 그래서 c = df.columns.to_series(). str.split ('/', expand = True) .stack(). values를 실행하면 오류가 발생합니다. 해결책을 다시 확인할 수 있습니까? – Spinor8
어떤 종류의 오류가 있습니까? – jezrael
괜찮습니다. 내 부분에서 실수. 다시 한번 감사드립니다. – Spinor8