首页 > 解决方案 > 当特定列的连续行值大于一个数字时,熊猫会删除行

问题描述

我有一个这样的数据框,

col1    col2 
  A      1
  B      2
  C      3
  D      3
  E      3
  F      4
  G      5
  H      5
  I      5
  J      5

现在我想删除连续 col2 值超过 3 次的那些行,在上面的数据框中, col2 值 5 出现超过 3 次,所以应该删除这些行。所以最终的数据框应该是这样的,

col1    col2 
 A      1
 B      2
 C      3
 D      3
 E      3
 F      4     

我可以使用带有计数器签入的 for 循环来执行此操作,但执行时间会更长。寻找一些 pythonic 方式/pandas 快捷方式来有效地做到这一点。

标签: pythonpandasdataframe

解决方案


要识别连续值,通常需要cumsum差异和分组:

groups = df.col2.ne(df.col2.shift()).cumsum()

group_sizes = df.groupby(groups).transform('size')

out = df[group_sizes <= 3)

推荐阅读