clg4 - 2 months ago 39x

Python Question

I would like to take a Pandas Dataframe named

`df`

`ID list`

1 [(0,1,2,3),(1,2,3,4),(2,3,4,NaN)]

2 [(Nan,1,2,3),(9,2,3,4)]

3 [(Nan,1,2,3),(9,2,3,4),(A,b,9,c),($,*,k,0)]

And I would like to unpack each list into columns 'A','B','C','D' representing the fixed positions in each tuple.

The result should look like:

`ID A B C D`

1 0 1 2 3

1 1 2 3 4

1 2 3 4 NaN

2 NaN 1 2 3

2 9 2 3 4

3 NaN 1 2 3

3 9 2 3 4

3 A b 9 c

3 $ * k 0

I have tried

`df.apply(pd.Series(list)`

`len`

Answer

```
In [38]: (df.groupby('ID')['list']
.apply(lambda x: pd.DataFrame(x.iloc[0], columns=['A', 'B', 'C', 'D']))
.reset_index())
Out[38]:
ID level_1 A B C D
0 1 0 0 1 2 3
1 1 1 1 2 3 4
2 1 2 2 3 4 NaN
3 2 0 NaN 1 2 3
4 2 1 9 2 3 4
5 3 0 NaN 1 2 3
6 3 1 9 2 3 4
7 3 2 A b 9 c
8 3 3 $ * k 0
```

Source (Stackoverflow)

Comments