La première liste dans "fav_colour" et "names" provient de "Tower Hamlets".

La deuxième liste en "couleur fav" et "noms" provient de "Waltham Forest".

Veuillez voir Script et sortie ACTUELLE ci-dessous:

import pandas as pd
import numpy as np


fav_colour = [['blue', 'yello', 'indigo', 'jasmine', 'green', 'black'], ['yellow','purple', 'red', 'beige']]

names = [['melanie', 'jess', 'sean', 'tom', 'arjun', 'brandon'],['scotty', 'harry', 'chloe', 'emily']]

boroughs = ['Tower Hamlets','Waltham Forrest']

No_of_rows = [len(name) for name in names] #using length to repeat rows in some way??


indexs4 = list(range(0,2))
df1 = [pd.DataFrame(zip(names[i], fav_colour[i], boroughs[i]), columns = ['names','fav', 'boroughs']) for i in indexs4]
df = pd.concat(df1)

"fav_colour" et "names" ont une relation un à un.

"names" et "fav_colour" ont une relation un à plusieurs avec les arrondissements

Je veux créer une relation un à plusieurs avec "fav_colour", "name" et "boroughs" comme colonnes comme ci-dessous:

Sortie désirée:

     names      fav boroughs
0  melanie     blue   Tower Hamlets
1     jess    yello   Tower Hamlets
2     sean   indigo   Tower Hamlets
3      tom  jasmine   Tower Hamlets
4    arjun    green   Tower Hamlets
5  brandon    black   Tower Hamlets  
0   scotty   yellow    Waltham Forrest
1    harry   purple    Waltham Forrest
2    chloe      red    Waltham Forrest
3    emily    beige    Waltham Forrest

Sortie actuelle:

 names      fav boroughs
0  melanie     blue        T
1     jess    yello        o
2     sean   indigo        w
3      tom  jasmine        e
4    arjun    green        r
5  brandon    black         
0   scotty   yellow        W
1    harry   purple        a
2    chloe      red        l
3    emily    beige        t
0
user13174343 14 avril 2020 à 13:20

2 réponses

Meilleure réponse
import pandas as pd

fav_colour = [['blue', 'yello', 'indigo', 'jasmine', 'green', 'black'], ['yellow','purple', 'red', 'beige']]

names = [['melanie', 'jess', 'sean', 'tom', 'arjun', 'brandon'],['scotty', 'harry', 'chloe', 'emily']]

boroughs = ['Tower Hamlets','Waltham Forrest']

df = pd.DataFrame(columns=['names','fav', 'boroughs'])

for i  in range(len(fav_colour)):
    tmp = pd.DataFrame(list(zip(names[i],fav_colour[i])),columns=['names','fav'])
    tmp["boroughs"] = boroughs[i]
    df = df.append(tmp,ignore_index= True)

0
trigonom 14 avril 2020 à 13:26

Ce n'est pas l'approche la plus sophistiquée, mais elle fait l'affaire.

Tout d'abord, j'organiserais les données dans un dictionnaire avec deux clés: 'Tower Hamlets' et 'Waltham Forrest':

pre_dict = {
    borough: {'fav': cols, 'names': names} 
    for borough, cols, names in zip(boroughs, fav_colour, names)
}

Ensuite, je parcourrais le dictionnaire et créerais une trame de données à partir de chaque paire clé-valeur:

cont = []
for k, v in pre_dict.items():
    pre_df = pd.DataFrame(v)
    pre_df['borough'] = k
    cont.append(pre_df)

pd.concat(cont)

#       fav    names          borough
#      blue  melanie    Tower Hamlets
#     yello     jess    Tower Hamlets
#    indigo     sean    Tower Hamlets
#   jasmine      tom    Tower Hamlets
#   ...
#       red    chloe  Waltham Forrest
#     beige    emily  Waltham Forrest
0
KenHBS 14 avril 2020 à 13:32