GroupBy结果列表的列表

Sup*_*ugy 20 python xlrd pandas

我有一张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
Run Code Online (Sandbox Code Playgroud)

我希望提取该数据,将其按第1列分组,然后将其添加到字典中,使其显示如下:

{0: [1],
1: [2,3,5],
2: [1,2],
3: [4,5],
4: [1],
5: [1,2,3]}
Run Code Online (Sandbox Code Playgroud)

到目前为止这是我的代码

excel = pandas.read_excel(r"e:\test_data.xlsx", sheetname='mySheet', parse_cols'A,C')
myTable = excel.groupby("Column1").groups
print myTable
Run Code Online (Sandbox Code Playgroud)

但是,我的输出看起来像这样:

{0: [0L], 1: [1L, 2L, 3L], 2: [4L, 5L], 3: [6L, 7L], 4: [8L], 5: [9L, 10L, 11L]}
Run Code Online (Sandbox Code Playgroud)

谢谢!

Zer*_*ero 33

你可以groupbyColumn1再取Column3apply(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]}
Run Code Online (Sandbox Code Playgroud)

或者,做

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]}
Run Code Online (Sandbox Code Playgroud)

  • 当@ EdChum相同且3分钟前发布时,有点意思是接受这个答案. (4认同)
  • 我该如何对值字段中的多列执行相同的操作,例如df.groupby('Column1')['Column2','Column3']。apply(list).to_dict(); 从而获得元组列表字典?预期结果将为{0:[(23,1)],...} (2认同)
  • 哇老兄,你的名字应该是英雄而不是零 (2认同)
  • 如果我想要“column2”和“column3”怎么办?存储在字典中,但也保留其colnames? (2认同)

EdC*_*ica 13

根据文件,GroupBy.groups:

是一个字典,其键是计算的唯一组,相应的值是属于每个组的轴标签.

如果你想要值本身,你可以groupby'Column1'然后调用apply并传递list方法以应用于每个组.

然后,您可以根据需要将其转换为dict:

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]}
Run Code Online (Sandbox Code Playgroud)

(注意:看看这个SO问题,为什么数字被跟着L)