Mám zoznam zoznamov
u=[[1, 1], [2, 1, 1, 1], [2, 2, 1, 1, 1, 1, 2, 2], [2, 2, 2, 2, 2, 3, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2], [2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 3, 2, 3, 3, 3, 2, 2, 3, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2]]
Chcem vytvoriť DataFrame pomocou pandy, kde sú riadky indexované podľa dĺžky u a stĺpce sú dané skupinou čísel v tomto zozname zoznamu.
Chcem, aby elementom tohto dátového rámca bola frekvencia, v ktorej sa elementy vyskytujú. Napríklad zhora chcem získať nasledujúcu tabuľku
V tabuľke vyššie stĺpec s 1 udávapočet v každom zozname, zatiaľ čo 2 dáva číslo 2. V bunke (1,1) bolo číslo 2 získané počítaním počtu prvkov v prvom zozname, ktorý je [1,1]. V bunke (2,1) sa číslo 3 získalo spočítaním počtu tých v zozname [2,1,1,1], zatiaľ čo v bunke (2,2) sa číslo dva získalo počítaním frekvencie dvoch v zozname [2,1,1,1] sa rovnaký postup celý opakoval.
Ja to viem spočítať počet opakujúcich sa prvkovv zozname musím počítať. napríklad [1,1,1,2] .count (1) = 3 čo chcem vedieť, je použiť Pandy, aby som dostal DataFrame ako je uvedené vyššie. Je to možné?
odpovede:
4 pre odpoveď č. 1Môžeš použiť Counter
aby sa zoznam transformoval do slovníka. Potom použite pd.DataFrame
previesť tento slovník
import pandas as pd
from collections import Counter
df = pd.DataFrame([Counter(u_) for u_ in u]).fillna(0)
Poznámka že tu nie je číslo 4, môžete ho ručne pridať do slovníka alebo jednoducho pridať stĺpec 4 v dátovom rámci po t. df[4] = 0
1 pre odpoveď č. 2
collections.Counter
je to užitočné:
Najprv vytvorte Counter
inštancie zo zoznamov a ich použitie na inštanciu dátových rámcov:
u=[[1, 1], [2, 1, 1, 1], [2, 2, 1, 1, 1, 1, 2, 2], [2, 2, 2, 2, 2, 3, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2], [2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 3, 2, 3, 3, 3, 2, 2, 3, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2]]
from collections import Counter
import pandas as pd
df = pd.DataFrame([Counter(e) for e in u]).fillna(0)
df[4] = 0.0
print(df)
Výkon
1 2 3 4
0 2 0.0 0.0 0.0
1 3 1.0 0.0 0.0
2 4 4.0 0.0 0.0
3 5 10.0 1.0 0.0
4 6 20.0 6.0 0.0
To je možné, pretože pod kapotou Counter
chová sa ako dict
.