按行和列过滤最大值

时间:2016-10-07 13:18:22

标签: python pandas filter pandas-groupby

我有这个数据框。

In [6]: df
Out[6]:
    Beam  Pos Comb   As  
0    B1    1    1    3          
1    B1    1    1    2          
2    B1    2    1    5          
3    B1    2    1    8          
4    B1    1    2    10         
5    B1    1    2    1         
6    B1    2    2    3          
7    B1    2    2    2
8    B2    1    1    1          
9    B2    1    1    2          
10   B2    2    1    5          
11   B2    2    1    6          
12   B2    1    2    8         
13   B2    1    2    1         
14   B2    2    2    3          
15   B2    2    2    2           

我需要获得每个光束的最大值和不同组合的位置搜索。

    Beam  Pos Comb   As
0    B1    1    2    10         
1    B1    2    1    8         
2    B2    1    2    8          
3    B2    2    1    6  

我无法弄清楚如何比较Beam,position和combination的“As”值。

也许分组光束,位置然后得到最大值?

3 个答案:

答案 0 :(得分:2)

您必须在多级索引上使用groupby方法:

d = df.groupby(by= [ "Beam",  "Pos", "Comb"])
g=d.agg({"As":"max"})
g.reset_index(inplace=True)

第一行将具有相同(Beam,Pos,Comb)索引的项组合在一起, 第二行选择每个组的最大Asreset_index撤消数据框中的组

答案 1 :(得分:0)

这个怎么样?

groups = df.groupby(by=['Beam', "Pos"])
idx = []
for group in groups:
    idx += [group[1].As.argmax()]

比显示     df.iloc[idx]

答案 2 :(得分:0)

您应该使用本机pandas功能而不是重新创建轮子,以使这非常简单易记:

df.groupby(['Beam', 'Pos', 'Comb']).max()