id y st

id = [243,2352,474, 84,443]
st = [1,3,5,9,2,6,7]

Deseo crear un marco de datos de pandas df utilizándolos para que cada valor de la lista id tenga todos los valores de la lista st.

Mi salida esperada es como:

id    st
243   1
243   3
243   5
243   9
243   2
243   6
243   7
2352  1
2352  3
2352  5
2352  9
2352  2
2352  6
2352  7

Y así sucesivamente...

¿Cómo puedo crear el mismo marco de datos de pandas?

2
Archit 10 may. 2019 a las 09:32

3 respuestas

La mejor respuesta

Utilice list comprehension con el pandas.DataFrame constructor:

df = pd.DataFrame([(i, s) for i in id for s in st], columns=['id', 'st'])

[fuera]

     id  st
0   243   1
1   243   3
2   243   5
3   243   9
4   243   2
5   243   6
6   243   7
7  2352   1
8  2352   3
9  2352   5
...
25   84   2
26   84   6
27   84   7
28  443   1
29  443   3
30  443   5
31  443   9
32  443   2
33  443   6
34  443   7
0
Chris A 10 may. 2019 a las 07:04

Utilice itertools.product con DataFrame constructor:

from  itertools import product
#pandas 0.24+
df = pd.DataFrame(product(id, st), columns = ['id','st'])
#pandas below
#df = pd.DataFrame(list(product(id, st)), columns = ['id','st'])

print (df)
      id  st
0    243   1
1    243   3
2    243   5
3    243   9
4    243   2
5    243   6
6    243   7
7   2352   1
8   2352   3
9   2352   5
10  2352   9
11  2352   2
12  2352   6
13  2352   7
14   474   1
15   474   3
16   474   5
17   474   9
18   474   2
19   474   6
20   474   7
21    84   1
22    84   3
23    84   5
24    84   9
25    84   2
26    84   6
27    84   7
28   443   1
29   443   3
30   443   5
31   443   9
32   443   2
33   443   6
34   443   7
0
jezrael 10 may. 2019 a las 06:37

Pruebe el siguiente código, si le ayuda:

pd.DataFrame({'id': sorted(id * len(st)), 'st': st * len(id)})

0
hacker315 10 may. 2019 a las 09:44