【问题标题】:Group list elements using pandas in python [duplicate]在python中使用pandas对列表元素进行分组[重复]
【发布时间】:2016-11-27 13:34:51
【问题描述】:

我有一个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

大家怎么做?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    这里有一个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
    

    上述方法得到一个pandas系列:


    获取列表列表:

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

    要获得一个 numpy 列表数组:

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

    【讨论】:

    • .C 的任何替代方案?
    • 如果您的意思是列名不是要在. 之后使用的明确字符串,您可以使用df.sort_values('A').groupby('B')['C'].apply(list)
    • 好的,如何将结果转换为numpy数组?
    • 二维数组还是列表数组?
    • 给您添麻烦了,我真的在学习。
    【解决方案2】:

    这是另一种方式,在您的问题中您似乎试图使用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]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-18
      • 2017-01-11
      • 2021-04-29
      • 2020-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多