Split list into column

Viewed 388

I have a df like

uid                                  services
000c80b7d2b3643689b1e516918ec193    ['A']
001b292c588ec6cc11f57324d40e422d    ['B','A',C']
006696f65899fdd87ba4894c784716f9    ['C','B']

(not ordered list in services column)

I'd like to remap the list in columns

uid                                  services      A   B  C 
000c80b7d2b3643689b1e516918ec193    ['A']          1   0  0
001b292c588ec6cc11f57324d40e422d    ['B','A',C']   1   1  1
006696f65899fdd87ba4894c784716f9    ['C','B']      0   1  1

Thank you

5 Answers

DataFrame Example

import pandas as pd
d = pd.read_csv('TestingAccommodations.csv', encoding = 'ANSI')
q = dict(tuple(d.groupby('student_id')))

#%%

t1 =[]
t2 = []
t3 =[]
t4 =[]
t5 =[]
t6= []
t11 =[]
t12 =[]
t13 =[]
t14 = []
for k, v in q.items():
    t1.append(k)
    t2.append(v['last_nam'].iloc[0])
    t3.append(v['first_nam'].iloc[0])
    t4.append(v['school_dbn'].iloc[0])
    t5.append(v['official_class'].iloc[0])
    t6.append(v['grade_level'].iloc[0])
    t7 = []
    t8 = []
    t9 =[]
    t10 = []
    for i in v['Accommodation']:
        t7.append(i)
    for j in v['Description']:
        t8.append(j)
    for k in v['SpecificImpRecoms']:
        t9.append(k)
    for l in v['OtherAccommodation']:
        t10.append(l)
    t11.append(t7)
    t12.append(t8)
    t13.append(t9)
    t14.append(t10)
cols = d.columns.to_list()
new = pd.DataFrame({cols[0]:t1, cols[1]:t2,cols[2]:t3,cols[3]:t4,cols[4]:t5,cols[5]:t6,cols[6]:t11,
                    cols[7]:t12,cols[8]:t13,cols[9]:t14})
new.to_excel('new.xlsx',index = False)

#%%

new.columns
f = lambda x: 'Accomodation_{}'.format(x + 1)
op = pd.DataFrame(
    new.Accommodation.values.tolist(),
    new.index, dtype=str).fillna('').rename(columns=f)
f2 = lambda x: 'Description_{}'.format(x + 1)
op2 = pd.DataFrame(
    new.Description.values.tolist(),
    new.index, dtype=str).fillna('').rename(columns=f)
f3 = lambda x: 'SpecificImpRecoms_{}'.format(x + 1)
op3 = pd.DataFrame(
    new.SpecificImpRecoms.values.tolist(),
    new.index, dtype=str).fillna('').rename(columns=f)
f4 = lambda x: 'OtherAccommodation_{}'.format(x + 1)
op4 = pd.DataFrame(
    new.OtherAccommodation.values.tolist(),
    new.index, dtype=str).fillna('').rename(columns=f)

new2 = pd.concat([new,op,op2,op3,op4], axis = 1)
Related