【问题标题】:Filter max values by row and columns按行和列过滤最大值
【发布时间】:2017-02-16 12:19:04
【问题描述】:

我有这个数据框。

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  

我不知道如何比较光束、位置和组合的“As”值。

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

【问题讨论】:

    标签: python pandas filter pandas-groupby


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢 JMat。是的,我知道。但是每一根光束都有一个位置和不同的组合。我需要在不同的组合中获得每个光束和位置搜索的最大值。
    • @Eduardo,对不起,我没看懂这个问题,我相应地编辑了我的答案
    • 谢谢!,我想这就是我需要的。 “g”是结果数据框?
    • 是的,但是您当然可以将所有内容放在一行中:df = df.groupby(by= [ "Beam", "Pos", "Comb"]).agg({"As":"max"}).reset_index(inplace=True)
    • @Eduardo 好的,我编辑了答案,您必须在不同的行上执行 .reset_index 或执行 g=d.agg({"As":"max"}).reset_index(inplace=False)
    【解决方案2】:

    这个怎么样?

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

    比显示 df.iloc[idx]

    【讨论】:

    • 谢谢亚历山大。我需要每个光束和位置的最大值。但是每个光束都有不同的组合,每个位置都有不同的“As”值。
    • 感谢 Alexander,这可能是另一种选择。我会试试看。
    • 这正是我想要的!谢谢亚历山大。效果很好。
    【解决方案3】:

    您应该使用原生的 pandas 函数而不是重新创建轮子,以使这变得非常简单易记:

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

    【讨论】:

    • 此方法显示所有组合。我需要最后一步选择与最大值的组合。
    • 显示每个组合的最大值。您还在寻找什么?
    • 我用 Alexander Zhukov 的答案解决了这个问题。谢谢@A.Kot
    猜你喜欢
    • 2018-08-11
    • 2017-10-13
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-23
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    相关资源
    最近更新 更多