我正在尝试查找每个组最后一次出现的原始索引值

时间:2019-10-22 16:47:13

标签: pandas dataframe

我正在尝试查找上一次出现的groupby组的原始索引。

如果我有以下给出的数据框:

data = {
    'Name':['Jack', 'Jill', 'Jill', 'Jill', 'Ryan',
            'Ryan','Lilian', 'Jack', 'Jack', 'Jack'],
    'Age': [15, 20, 25, 30, 23, 23, 45, 24, 65, 115]
}

df = pd.DataFrame(data)

df

我希望看到:

0 Jack 15
3 Jill 30
5 Ryan 23
6 Lilian 45
9 Jack 115

groupby之后尝试使用.last()groupby,但这摆脱了索引。

3 个答案:

答案 0 :(得分:3)

如果您想删除重复项而不考虑后面出现为重复的记录(我认为编辑之前的预期输出),您也可以执行以下操作:

(df.assign(k=df['Name'].ne(df['Name'].shift()).cumsum())
  .drop_duplicates(['Name','k'],keep='last'))

或者像@PiR提到的那样更好:

df[df.Name.ne(df.Name.shift(-1))]

     Name  Age  k
0    Jack   15  1
3    Jill   30  2
5    Ryan   23  3
6  Lilian   45  4
9    Jack  115  5

答案 1 :(得分:3)

也可以

df.groupby(df.Name.ne(df.Name.shift()).cumsum()).tail(1)

     Name  Age
0    Jack   15
3    Jill   30
5    Ryan   23
6  Lilian   45
9    Jack  115

答案 2 :(得分:1)

使用duplicated

class Product {
    public int ProductID {get;set;}
    public string Description {get;set;}
    public decimal Price {get;set;}
}

输出

print(df[~df.Name.ne(df.Name.shift()).cumsum().duplicated(keep='last')])