type(Table) pandas.core.frame.DataFrame
Table ======= ======= ======= 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
对于熟悉熊猫的任何人,我将如何使用该.groupby()方法构建多值字典?
.groupby()
我想要类似此格式的输出:
{ 0: [(23,1)] 1: [(5, 2), (2, 3), (19, 5)] # etc... }
其中,Col1值分别表示为键和对应的值,Col2并且Col3是元组,每个元组打包到一个数组中Col1。
Col1
Col2
Col3
我的语法仅适用于将一列汇集到.groupby():
Table.groupby('Column1')['Column2'].apply(list).to_dict() # Result as expected { 0: [23], 1: [5, 2, 19], 2: [56, 22], 3: [2, 14], 4: [59], 5: [44, 1, 87] }
但是,为索引指定多个值会导致返回值的列名:
Table.groupby('Column1')[('Column2', 'Column3')].apply(list).to_dict() # Result has column namespace as array value { 0: ['Column2', 'Column3'], 1: ['Column2', 'Column3'], 2: ['Column2', 'Column3'], 3: ['Column2', 'Column3'], 4: ['Column2', 'Column3'], 5: ['Column2', 'Column3'] }
如何返回值数组中的元组列表?
自定义您使用的函数,apply以便为每个组返回一个列表列表:
apply
df.groupby('Column1')[['Column2', 'Column3']].apply(lambda g: g.values.tolist()).to_dict() # {0: [[23, 1]], # 1: [[5, 2], [2, 3], [19, 5]], # 2: [[56, 1], [22, 2]], # 3: [[2, 4], [14, 5]], # 4: [[59, 1]], # 5: [[44, 1], [1, 2], [87, 3]]}
如果您需要显式的元组列表,请使用list(map(tuple, ...))进行转换:
list(map(tuple, ...))
df.groupby('Column1')[['Column2', 'Column3']].apply(lambda g: list(map(tuple, g.values.tolist()))).to_dict() # {0: [(23, 1)], # 1: [(5, 2), (2, 3), (19, 5)], # 2: [(56, 1), (22, 2)], # 3: [(2, 4), (14, 5)], # 4: [(59, 1)], # 5: [(44, 1), (1, 2), (87, 3)]}