I have a dataframe
A B
1 [{'X': 'Room1', 'Y': ['A1', 'A2']}
2 [{'X': 'Room2', 'Y': ['B1', 'B2','B3']}
I am trying to split the list
inside B
col , into new columns
Expected Dataframe
A opt_X opt_Y_1 opt_Y_2 opt_Y_2
1 Room1 A1 A2 0
1 Room2 B1 B2 B3
I got it till here
L = [json_normalize(x) for x in df.pop('B')]
df = df.join(pd.concat(L, ignore_index=True, sort=False).add_prefix('opt_'))
To get this dataframe
A opt_X opt_Y
1 Room1 ['A1','A2']
2 Room2 ['B1', 'B2','B3']
CodePudding user response:
Use concat
with all column without Y
and then convert Y
column to DataFrame
with rename
for starting columns names by 1
:
L = [pd.json_normalize(x) for x in df.pop('B')]
df1 = pd.concat(L, ignore_index=True, sort=False)
df = pd.concat([df,
df1.drop('Y', axis=1).add_prefix('opt_'),
pd.DataFrame(df1['Y'].tolist())
.rename(columns=lambda x: x 1)
.fillna(0).add_prefix('opt_Y_')], axis=1)
print (df)
A opt_X opt_Y_1 opt_Y_2 opt_Y_3
0 1 Room1 A1 A2 0
1 2 Room2 B1 B2 B3
CodePudding user response:
After getting df from your code, try this to split;
df_temp = pd.DataFrame(df['opt_Y'].tolist())
df_temp.fillna(0,inplace=True)
df = pd.concat([df, df_temp], axis=1)
Hope this Helps...