我在下面为您展示示例数据集和所需的输出。
身份证号码
1 50
1 49
1 48
2 47
2 40
2 31
3 60
3 51
3 42
输出示例
1 49
2 40
3 51
我想为数据集中的每个组保留第二个条目。我已经按ID对它们进行了分组,但是我不希望每个ID保留第二个条目,然后从ID中删除所有重复项。
使用GroupBy.nth
与1
用于第二排,因为蟒蛇数从0
:
df1 = df.groupby('ID', as_index=False).nth(1)
print (df1)
ID number
1 1 49
4 2 40
7 3 51
GroupBy.cumcount
计数器和过滤的另一种解决方案是boolean indexing
:
df1 = df[df.groupby('ID').cumcount() == 1]
详细资料:
print (df.groupby('ID').cumcount())
0 0
1 1
2 2
3 0
4 1
5 2
6 0
7 1
8 2
dtype: int64
编辑:第二个最大值的解决方案-s首先排序,然后获取第二行-值对于每个组必须是唯一的:
df = (df.sort_values(['ID','number'], ascending=[True, False])
.groupby('ID', as_index=False)
.nth(1))
print (df)
ID number
1 1 49
4 2 40
7 3 51
如果要存在第二个最大值,则添加DataFrame.drop_duplicates
:
print (df)
ID number
0 1 50 <-first max
1 1 50 <-first max
2 1 48 <-second max
3 2 47
4 2 40
5 2 31
6 3 60
7 3 51
8 3 42
df3 = (df.drop_duplicates(['ID','number'])
.sort_values(['ID','number'], ascending=[True, False])
.groupby('ID', as_index=False)
.nth(1))
print (df3)
ID number
2 1 48
4 2 40
7 3 51
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句