删除数据框中两个值之间在列中重复多次的所有行

数据挖掘 Python 熊猫
2022-02-23 00:12:32

我有数据框,假设它里面是一个column_A。此 column_A 有 3 个字符串作为值,称它们为“new_records”、“deletions”、“changes”,它们按该顺序在数据帧中重复多次,中间始终包含多行。我想删除从删除开始到更改结束的所有行,即我只想在数据框中留下 new_records。数据框如下所示:

column_A         column_B     column_C ....
NEW_RECORDS        val1         val2
string1_new        val3         val4 
string2_new        val5         val6 
  NaN              val9         val10
  NaN              val11        val12 
string3_new
 ...
DELETIONS          val7         val8
string1_del         ...           ...
   NaN              ...           ...
string2_del         ...           ...
  ...    
CHANGES             ...           ...
 str1_ch            ... 
 str2_ch
  ... 
NEW_RECORDS
 str200_new        ...
 str300_new           ...
  NaN
  NaN
  ...
DELETIONS
 NaN
 str100_del
 NaN
 str290_del        ...
  ...
CHANGES
 str1000
 str20000
  NaN
   ...           ...

我希望最后只有 new_records 和删除值之间的行块,没有属于删除组和更改组的行。我怎样才能做到这一点?

更新:

在“new_records”之后和“deletions”组开始之前有很多行,在删除组开始之后和“changes”组开始之后有很多行。我只需要提取属于 new_records 组的行。因此,所有数据帧中值“new_records”之后和“deletions”值之前的所有行。

1个回答

您可以通过向前填充空白值来实现这一点,然后只选择那些new_records

df.fillna(method='ffill')

df = df[df['column_A'] == 'new_records']

根据数据框中的实际值,您可能需要首先用 NaN替换看似空/空格的字符串:

df['column_A'] = df['column_A'].replace(r'^\s*$', np.nan, regex=True)