根据pandas数据帧中的条件删除每个组的最后一行

时间:2017-10-20 04:08:26

标签: python pandas dataframe

我有以下数据框:

    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

请建议。

2 个答案:

答案 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