2017-10-20 38 views
1

我有以下數據框:刪除基於狀態的大熊貓數據幀每一組的最後一個行

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其刪除該name屬性組的最後一排,如果計大於1.對於等式-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 

請指點。

回答

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

使用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