我有以下数据框:
name gender count
0 A M 3
1 A F 2
2 A Nan 3
3 B NaN 2
4 C F 4
5 D M 5
6 D Nan 5
我想构建一个结果数据框df1
,如果该组的计数大于1,则删除该name
属性组的最后一行。对于eq- name
A存在3次,因此应删除包含A的最后一行。 B和C只出现一次,因此应保留包含它们的行。
生成的数据框df1
应如下所示:
name gender count
0 A M 3
1 A F 2
2 B NaN 2
3 C F 4
4 D M 5
请建议。
答案 0 :(得分:1)
使用
In [4598]: (df.groupby('name').apply(lambda x: x.iloc[:-1] if len(x)>1 else x)
.reset_index(drop=True))
Out[4598]:
name gender count
0 A M 3
1 A F 2
2 B NaN 2
3 C F 4
4 D M 5
答案 1 :(得分:1)
使用groupby
+ head
:
g = df.groupby('name', as_index=False, group_keys=False)\
.apply(lambda x: x.head(-1) if x.shape[0] > 1 else x)
print(g)
name gender count
0 A M 3
1 A F 2
3 B NaN 2
4 C F 4
5 D M 5