2016-11-27 221 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]]