web-dev-qa-db-ja.com

リストの辞書へのGroupByの結果

次のようなExcelシートがあります。

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

そして、そのデータを抽出し、列1でグループ化して、次のようにディクショナリに追加します。

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

これはこれまでのところ私のコードです

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

ただし、私の出力は次のようになります。

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

ありがとう!

31
SuperDougDougy

_Column1_でgroupbyを実行し、次に_Column3_をapply(list)に渡して_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]}
_

または、

_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

ドキュメント によると、GroupBy.groups

キーは計算された一意のグループであり、対応する値は各グループに属する軸ラベルである辞書です。

値自体が必要な場合は、 groupby 'Column1'を呼び出して apply を呼び出し、listを渡すことができます。各グループに適用する方法。

次に、必要に応じてそれを辞書に変換できます。

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]}

(注: this SO question に数字の後にL)が続く理由をご覧ください)

11
EdChum