Reputation: 385
I have pandas df having one column containing list of different size. Though maximum size of list can be 10. My requirement is to convert these list & add it to column. Sample of my data looks like
prod_1 prod_2 subs_number
34007 [3330193, 349723, 3097333, 8145148] 4
34492 [7554951, 349723, 3097340, 350293, 3097333, 22... 8
126063 [350293, 7901614, 7901597, 349723, 7901731, 30... 7
126290 [3097340, 7901614, 7900213, 350293, 7901597] 5
222338 [7554913, 7554951, 3214604, 34492, 8145148] 5
I want result something like below:
prod_1 subs1 subs2 subs3 subs4 subs5 subs6 subs7
34007 3330193 349723 3097333 8145148
126063 350293 7901614 7901597 349723 7901731
Is it doable in pandas. Please help
Upvotes: 1
Views: 75
Reputation: 136
Should work no matter how long would be your lists
Sample:
df = pd.DataFrame([[34007, [3330193, 349723, 3097333,8145148]], [126063, [350293,7901614,7901597,349723,7901731]], [10, [1,2,3,4,5,6,7,8,9,10]]], columns=['prod_1', 'prod_2'])
Sample output:
prod_1 prod_2
0 34007 [3330193, 349723, 3097333, 8145148]
1 126063 [350293, 7901614, 7901597, 349723, 7901731]
2 10 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Create desire dataframe:
pd.DataFrame(df['prod_2'].values.tolist()).add_prefix('subs').join(df['prod_1'])
please note: if column contain at least one NaN value, its type will be changed to float.
Upvotes: 2
Reputation: 626
Hope this works!
df = pd.DataFrame(df.prod_2.values.tolist(),index=df.index,
columns=['subs1','subs2','subs3', 'subs4','subs5', 'subs6','subs7'])
Upvotes: 2
Reputation: 38552
Not tested by it should work with pd.Series
,
df2 = df2.prod_2.apply(pd.Series)
df2.columns = ['subs1', 'subs2','subs3', 'subs4','subs5', 'subs6','subs7']
print(df2)
Upvotes: 1