在数据框中查找每个分区的最大值

时间:2016-03-10 17:14:11

标签: python pandas dataframe

我有一张看起来像这样的表:

Make    RfR ID  Test ID
VOLVO   8971    1
VOLVO   8173    28
VOLVO   8554    1
VOLVO   8556    1
VOLVO   8409    1
VOLVO   8712    1
VOLVO   8408    1
VOLVO   2056    35    
KIA     8545    8
KIA     8157    1
KIA     7847    1
KIA     713     2
KIA     8551    3
KIA     8453    2
KIA     8466    8

这里我试图输出一个表,其行对应于每个品牌的测试ID的最大值(因此按make分区)。

输出应该如下所示:

Make    RfR ID  Test ID
VOLVO   2056    35
KIA     8545    28

在SQL中我会使用' partition by'但还没找到与熊猫做类似的事情

2 个答案:

答案 0 :(得分:2)

IIUC,您想要“对应于每个品牌的测试ID的最大值的行”。为此,我会通过make找出最大值的索引,然后使用它们索引到df

>>> df.groupby("Make")["Test ID"].idxmax()
Make
KIA      8
VOLVO    7
Name: Test ID, dtype: int64
>>> df.loc[df.groupby("Make")["Test ID"].idxmax()]
    Make  RfR ID  Test ID
8    KIA    8545        8
7  VOLVO    2056       35

如果您的索引不是唯一的,您可以先.reset_index()

请注意,这将在重复的情况下检索第一个最大值(因此KIA 8545而不是KIA 8466,它们都具有测试ID == 8。)如果您反而想要它们,那么您也可以使用{{ 1}}:

transform

答案 1 :(得分:1)

试试这个:

$(document).ready(function() {
    if(localStorage.getItem("storageItemName")) {
        $(target-element).addClass('myClass')
    }
});

$(window).unload(function() {
    localStorage.setItem("storageItemName", $(target-element).hasClass('myClass'));
});

测试:

print(df.groupby('Make').max())

输出:

import six
import pandas as pd


data = """\
Make    RfRID  TestID
VOLVO   8971    1
VOLVO   8173    28
VOLVO   8554    1
VOLVO   8556    1
VOLVO   8409    1
VOLVO   8712    1
VOLVO   8408    1
VOLVO   2056    35    
KIA     8545    8
KIA     8157    1
KIA     7847    1
KIA     713     2
KIA     8551    3
KIA     8453    2
KIA     8466    8
"""

df = pd.read_csv(six.StringIO(data), sep='\s+')
print(df)

print(df.groupby('Make').max())

PS可选择重置索引:

       RfRID  TestID
Make
KIA     8551       8
VOLVO   8971      35