2016-10-07 60 views
-1

我有这个数据帧。按行和列过滤最大值

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   

我需要让每束和位置的最大值在diferent组合搜索。

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

我不能想通了,我怎么可以比较梁,位置和组合“作为”值。

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

回答

0

这个怎么样?

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

不是显示 df.iloc[idx]

+0

谢谢亚历山大。我需要每个光束和位置的最大值。但每个光束都有不同的组合,每个位置有不同的“As”值。 – Eduardo

+0

@Eduardo,编辑代码,试试吧 –

+0

感谢Alexander,这可能是另一种选择。我会试试看。 – Eduardo

2

你必须使用groupby方法对多级索引:

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

第一线组一起具有相同(Beam,Pos,Comb)索引中的项目, 第二行选择对每个组的最大值Asreset_index撤销数据帧中的组

+0

感谢JMat。是的,我知道。但是每个梁都有一个位置和不同的组合。我需要获得每个光束的最大值和位置搜索的不同组合。 – Eduardo

+0

@Eduardo,抱歉,我不明白这个问题,我相应地编辑了我的答案 – JMat

+0

谢谢!我认为这是我需要的。 “g”是结果数据帧? – Eduardo

0

您应该使用本地大熊猫的功能,而不是重新创建车轮,使这个非常简单易记:

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

此方法显示所有组合。我需要最后一步选择最大值的组合。 – Eduardo

+0

它显示每个组合的最大值。你还在找什么? –

+0

我用Alexander Zhukov的答案解决了这个问题。谢谢@ A.Kot – Eduardo

相关问题