/ / DataFrame zo zoznamu - python, zoznam, pandy, dataframe

DataFrame zo zoznamu - python, list, panda, dataframe

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 DataFrame zo zoznamu

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ď č. 1

Môž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.