2016-11-27 193 views
1

组列表中的元素我有一个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 

如何做到这一点?

回答

3

这里是大熊猫的解决方案,可以通过第一列的列表进行排序,GROUPBY第二列的和隐蔽的第三列到列表中,如果你喜欢的结果是一个列表,使用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]] 

要获取列表的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]]) 
+0

任何替代的.C? – jean

+0

你可以使用'df.sort_values('A')。groupby('B')['C']。apply(list)'如果你的意思是列名不是在'.'后面使用的明确字符串。 – Psidom

+0

好吧,我如何将结果转换为numpy数组? – jean

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