我正在尝试查找上一次出现的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
,但这摆脱了索引。
答案 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')])