Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pandas long format DataFrame from multiple lists of different length

Consider I have multiple lists

A = [1, 2, 3]
B = [1, 4]

and I want to generate a Pandas DataFrame in long format as follows:

type | value
------------
A    | 1
A    | 2
A    | 3
B    | 1
B    | 4

What is the easiest way to achieve this? The way over the wide format and melt is not possible(?) because the lists may have different lengths.

like image 982
Rocreex Avatar asked Nov 25 '25 08:11

Rocreex


1 Answers

Create dictionary for types and create list of tuples by list comprehension:

A = [1, 2, 3]
B = [1, 4]

d = {'A':A,'B':B}

print ([(k, y) for k, v in d.items() for y in v])
[('A', 1), ('A', 2), ('A', 3), ('B', 1), ('B', 4)]

df = pd.DataFrame([(k, y) for k, v in d.items() for y in v], columns=['type','value'])
print (df)
  type  value
0    A      1
1    A      2
2    A      3
3    B      1
4    B      4

Another solution, if input is list of lists and types should be integers:

L = [A,B]
df = pd.DataFrame([(k, y) for k, v in enumerate(L) for y in v], columns=['type','value'])
print (df)
   type  value
0     0      1
1     0      2
2     0      3
3     1      1
4     1      4
like image 180
jezrael Avatar answered Nov 27 '25 22:11

jezrael



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!