2017-03-09 68 views
0

它看起来像我不明白大熊猫groupby如何工作,以及如何使用它。有人可以解释我做错了什么或如何解决我的问题? 我想根据不同的列提取一些数据。看例子:实现熊猫groupby - 索引和切片

Number Name Param1 Param2 Param3 
0  1 A  0 0.179264 0.565864 
1  2 A  1 0.374258 0.985103 
2  1 C  2 0.799988 0.855600 
3  3 B  3 0.237612 0.290065 
4  3 C  4 0.195463 0.232030 
5  2 C  5 0.611886 0.712429 
6  4 A  6 0.178465 0.056347 
7  1 B  7 0.018789 0.393464 
8  5 B  8 0.549566 0.457160 
9  4 B  9 0.149801 0.590501 
10  4 C  10 0.112857 0.327013 
11  3 A  11 0.902660 0.670725 
12  2 B  12 0.474427 0.104224 
13  5 C  13 0.691259 0.620992 
14  5 A  14 0.043179 0.028890 

然后我想要做一个涉及两个循环的操作。基本上,在这个例子中,我想打印每个数字引用的每个Name的参数(作为一个数组,但这不是问题)[Param1,Param2,Param3]。

因此,一个期望的结果会是什么样子: 数1:[[0, 0.179264, 0.565864],[2, 0.799988, 0.855600],[7, 0.018789, 0.393464]] 数2:[[1, 0.374258, 0.985103],[5, 0.611886, 0.712429],[12, 0.474427, 0.104224]]等(后来我想绘制它们,并使用“名称”为标签

这是代码:

for n in example.groupby('Number'): 
    for name in example['Name']: 
     params = np.array(example.loc[n['Name']==name,['Param1','Param2','Param3']]) 
     print 'Group:', n 
     print 'Params:\n', params 

但好像我无法用数据帧的索引为GROUPBY对象。此代码生成TypeError: tuple indices must be integers, not str。 有可能,我现在提出,试图弄明白多个错误,但它似乎是正确索引和切片g roupby对象是主要问题。

回答

1

我不知道,如果很好地理解,但尽量loop in groups

for i, n in df.groupby('Number'): 
    print (i) 
    print (n[['Param1','Param2','Param3']]) 
    #for output as nested lists 
    #print (n[['Param1','Param2','Param3']].values.tolist()) 

1 
    Param1 Param2 Param3 
0  0 0.179264 0.565864 
2  2 0.799988 0.855600 
7  7 0.018789 0.393464 
2 
    Param1 Param2 Param3 
1  1 0.374258 0.985103 
5  5 0.611886 0.712429 
12  12 0.474427 0.104224 
3 
    Param1 Param2 Param3 
3  3 0.237612 0.290065 
4  4 0.195463 0.232030 
11  11 0.902660 0.670725 
4 
    Param1 Param2 Param3 
6  6 0.178465 0.056347 
9  9 0.149801 0.590501 
10  10 0.112857 0.327013 
5 
    Param1 Param2 Param3 
8  8 0.549566 0.457160 
13  13 0.691259 0.620992 
14  14 0.043179 0.028890