(o una lista di liste ... Ho appena modificato)perno dizionario irregolare delle liste in panda dataframe
Esiste un metodo di python/panda esistente per la conversione di una struttura come questa
food2 = {}
food2["apple"] = ["fruit", "round"]
food2["bananna"] = ["fruit", "yellow", "long"]
food2["carrot"] = ["veg", "orange", "long"]
food2["raddish"] = ["veg", "red"]
in una tabella pivot come questa?
+---------+-------+-----+-------+------+--------+--------+-----+
| | fruit | veg | round | long | yellow | orange | red |
+---------+-------+-----+-------+------+--------+--------+-----+
| apple | 1 | | 1 | | | | |
+---------+-------+-----+-------+------+--------+--------+-----+
| bananna | 1 | | | 1 | 1 | | |
+---------+-------+-----+-------+------+--------+--------+-----+
| carrot | | 1 | | 1 | | 1 | |
+---------+-------+-----+-------+------+--------+--------+-----+
| raddish | | 1 | | | | | 1 |
+---------+-------+-----+-------+------+--------+--------+-----+
Ingenuamente, probabilmente mi collegherei al dizionario. Vedo come posso usare una mappa su ogni elenco interno, ma non so come unire/impilarli sul dizionario. Una volta che ho fatto unirsi a loro, ho potuto solo usare pandas.pivot_table
for key in food2:
attrlist = food2[key]
onefruit_pairs = map(lambda x: [key, x], attrlist)
one_fruit_frame = pd.DataFrame(onefruit_pairs, columns=['fruit', 'attr'])
print(one_fruit_frame)
fruit attr
0 bananna fruit
1 bananna yellow
2 bananna long
fruit attr
0 carrot veg
1 carrot orange
2 carrot long
fruit attr
0 apple fruit
1 apple round
fruit attr
0 raddish veg
1 raddish red
Eccellente. Hai qualche intuizione su come questo si realizzerebbe (rispetto ad alcune magie di Pandas non ancora specificate) su centinaia di migliaia di "frutti" e migliaia di attributi? –
I "ha" importato itertools –
Questa soluzione è ottimizzata per semplicità anziché per prestazioni. C'è molto spazio per migliorare, specialmente se si conoscono gli attributi in anticipo. Aggiornato con "importazione" mancante. –