Dance Party2 Dance Party2 - 17 days ago 5
Python Question

Python Add Elements to Lists within List if Missing

Given the following list of lists:

a = [[2,3],[1,2,3],[1]]


I need each list within a to have the same number of elements.
First, I need to get the longest length of any list in a.
Then, I need to ensure all lists are at least that long.
If not, I want to add a zero (0) to the end until that is true.
The desired result is:

b = [[2,3,0],[1,2,3],[1,0,0]]


Thanks in advance!

P.S. I also need to apply this to a Pandas Data Frame like this one:

import pandas as pd
b = [[2,3,0],[1,2,3],[1,0,0]]
f=pd.DataFrame({'column':b})

Answer

How about

pd.DataFrame(a).fillna(0)

enter image description here


to get exactly what you asked for

pd.Series(pd.DataFrame(a).fillna(0).astype(int).values.tolist()).to_frame('column')

enter image description here


this is also related to this question

where you can get much better performance with

def box(v):
    lens = np.array([len(item) for item in v])
    mask = lens[:,None] > np.arange(lens.max())
    out = np.full(mask.shape, 0, dtype=int)
    out[mask] = np.concatenate(v)
    return out

pd.DataFrame(dict(columns=box(a).tolist()))

enter image description here


timing
enter image description here

Comments