如何在使用超过2列的pandas数据帧在Python中满足某个条件后删除观察

时间:2017-03-13 16:03:06

标签: python-2.7 pandas

我正在使用pandas数据帧,我想在满足条件(cond = 1)后删除具有相同名称的观察。

我的数据集如下:

person  med   cond
  A      a     0    
  A      b     0    
  A      a     1
  A      d     0
  A      e     0
  B      a     0 
  B      c     1
  C      e     1
  C      f     0
  D      a     0
  D      f     0

我想得到这个:

person  med  cond
  A      a     0    
  A      b     0
  A      a     1    
  B      a     0 
  B      c     1    
  C      e     1
  D      a     0
  D      f     0

我希望代码首先检查下一个人是否具有相同的名称,然后检查是否满足条件(cond = 1),如果是,则删除所有具有相同名称的下一行。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

您可以在df上groupby,然后在lambda中引用感兴趣的列表,然后调用reset_index(drop=True)以删除冗余索引:

In [38]:
df.groupby('person').apply( lambda x: x.loc[:x['cond'].idxmax()] if len(x[x['cond']==0]) != len(x) else x).reset_index(drop=True)

Out[38]:
  person med  cond
0      A   a     0
1      A   b     0
2      A   a     1
3      B   a     0
4      B   c     1
5      C   e     1
6      D   a     0
7      D   f     0