在python中使用pandas对列表元素进行分组

时间:2016-11-27 13:34:52

标签: python pandas

我有一个python列表如下:

my_list = 

 [[25, 1, 0.65],
 [25, 3, 0.63],
 [25, 2, 0.62],
 [50, 3, 0.65],
 [50, 2, 0.63], 
 [50, 1, 0.62]]

我想根据这条规则订购它们:

1 --> [0.65, 0.62] <--25, 50
2 --> [0.62, 0.63] <--25, 50
3 --> [0.63, 0.65] <--25, 50

所以预期的结果如下:

Result = [[0.65, 0.62],[0.62, 0.63],[0.63, 0.65]]

I tried as follows:
import pandas as pd

df = pd.DataFrame(my_list,columns=['a','b','c'])
res = df.groupby(['b', 'c']).get_group('c')
print res

ValueError: must supply a tuple to get_group with multiple grouping keys

怎么做呢?

2 个答案:

答案 0 :(得分:3)

这是一个pandas解决方案,您可以按第一列排序列表,按第二列分组,并将第三列转换为列表,如果您希望结果为列表,请使用tolist()方法:

df = pd.DataFrame(my_list, columns=list('ABC'))

s = df.sort_values('A').groupby('B').C.apply(list)

#B
#1    [0.65, 0.62]
#2    [0.62, 0.63]
#3    [0.63, 0.65]
#Name: C, dtype: object

上述方法获得了一个熊猫系列:

获取列表清单:

s.tolist():
# [[0.65000000000000002, 0.62], [0.62, 0.63], [0.63, 0.65000000000000002]]

获得一系列列表:

s.values
# array([[0.65000000000000002, 0.62], [0.62, 0.63],
#        [0.63, 0.65000000000000002]], dtype=object)

s.values[0]
# [0.65000000000000002, 0.62]          # here each element in the array is still a list

要获得二维数组或矩阵,您可以采用不同的方式转换数据框,即将原始数据框转换为宽格式,然后将其转换为二维数组:

df.pivot('B', 'A', 'C').as_matrix()
# array([[ 0.65,  0.62],
#        [ 0.62,  0.63],
#        [ 0.63,  0.65]])

或者:

np.array(s.tolist())
# array([[ 0.65,  0.62],
#        [ 0.62,  0.63],
#        [ 0.63,  0.65]])

答案 1 :(得分:1)

这是另一种方式,因为您在问题中似乎试图使用get_group()

g = [1,2,3]
result = []
for i in g:
    lst = df.groupby('b')['c'].get_group(i).tolist()
    result.append(lst)

print(result)
[[0.65, 0.62], [0.62, 0.63], [0.63, 0.65]]