使用大熊猫蟒蛇
问题描述:
组列表中的元素我有一个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
如何做到这一点?
答
这里是大熊猫的解决方案,可以通过第一列的列表进行排序,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]])
答
这里是另一种方式,因为它似乎在你的问题,你试图使用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]]
任何替代的.C? – jean
你可以使用'df.sort_values('A')。groupby('B')['C']。apply(list)'如果你的意思是列名不是在'.'后面使用的明确字符串。 – Psidom
好吧,我如何将结果转换为numpy数组? – jean