web-dev-qa-db-fra.com

GroupBy résultats au dictionnaire de listes

J'ai une feuille Excel qui ressemble à ceci:

Column1 Column2 Column3
0       23      1
1       5       2
1       2       3
1       19      5
2       56      1
2       22      2
3       2       4
3       14      5
4       59      1
5       44      1
5       1       2
5       87      3

Et je cherche à extraire ces données, à les regrouper par colonne 1 et à les ajouter à un dictionnaire pour qu'elles apparaissent comme ceci:

{0: [1],
1: [2,3,5],
2: [1,2],
3: [4,5],
4: [1],
5: [1,2,3]}

C'est mon code jusqu'à présent

Excel = pandas.read_Excel(r"e:\test_data.xlsx", sheetname='mySheet', parse_cols'A,C')
myTable = Excel.groupby("Column1").groups
print myTable

Cependant, ma sortie ressemble à ceci:

{0: [0L], 1: [1L, 2L, 3L], 2: [4L, 5L], 3: [6L, 7L], 4: [8L], 5: [9L, 10L, 11L]}

Merci!

31
SuperDougDougy

Vous pouvez groupby sur Column1 Puis prendre Column3 Dans apply(list) et appeler to_dict?

In [81]: df.groupby('Column1')['Column3'].apply(list).to_dict()
Out[81]: {0: [1], 1: [2, 3, 5], 2: [1, 2], 3: [4, 5], 4: [1], 5: [1, 2, 3]}

Ou, faites

In [433]: {k: list(v) for k, v in df.groupby('Column1')['Column3']}
Out[433]: {0: [1], 1: [2, 3, 5], 2: [1, 2], 3: [4, 5], 4: [1], 5: [1, 2, 3]}
31
Zero

Selon les docs , le GroupBy.groups:

est un dict dont les clés sont les groupes uniques calculés et les valeurs correspondantes étant les étiquettes d'axe appartenant à chaque groupe.

Si vous voulez les valeurs elles-mêmes, vous pouvez groupby 'Colonne1' puis appelez apply et passez le list méthode à appliquer à chaque groupe.

Vous pouvez ensuite le convertir en dict comme vous le souhaitez:

In [5]:

dict(df.groupby('Column1')['Column3'].apply(list))
Out[5]:
{0: [1], 1: [2, 3, 5], 2: [1, 2], 3: [4, 5], 4: [1], 5: [1, 2, 3]}

(Remarque: jetez un œil à cette SO question pour savoir pourquoi les nombres sont suivis de L)

11
EdChum