删除数据帧的一部分



我被一项必须完成的任务卡住了。我有一个数据帧,我想根据一些条件删除这个数据帧的特定行。当df[var1]>40我们注意到df[var2]==x 的值

我想删除第一行中df[var1]>40,df[var2]==x+1除外。知道df[var2]将再次包含这个";x〃;我想保持的价值。我只想从df[var2]==x删除到第一个df[var2]==x+1

我正在竭尽全力寻找一些有效的代码:(

我正在使用python。哪里是粗体我想删除

var2 : [1,1,**1,1**,2,2,2, etc ...1,1,1,2,2,etc...]
var1 : [4,12,**350,4**,18,12,etc....12,14,etc...]

我写了这样的代码来解释我想做什么:

for index, row in df.iterrows():
if df.var1[index]>40:
x = df.var2[index]
while df.var[index] == x :
df.drop(row)

IIUC,假设以下数据帧:

>>> df
var2  var1
0      1     4
1      1    12
2      1    55  # <- (1) remove from here
3      1    21
4      1    32  # <- (1) until then
5      2    23
6      2    29
7      2    49  # <- (2) remove from here
8      2    72
9      2    23  # <- (2) until then
10     1    12
11     1    49  # <- (3) remove from here
12     1    23  # <- (3) until then

由于var2具有循环值,因此不能直接使用它,必须创建伪组。对于每个新组,找到大于40的var1并应用累积和。仅保留值等于0的行。

>>> df[df.groupby(df['var2'].ne(df['var2'].shift()).cumsum())['var1']
.apply(lambda x: x.gt(40).cumsum()).eq(0)]
var2  var1
0      1     4
1      1    12
5      2    23
6      2    29
10     1    12

这应该完成任务:

df[df[var1] <= 40 | df[var2] != x+1]

本质上,保留具有相反条件的行

您可以使用此语法通过添加"amp">条件间

df[(df[var1] <= 40) & (df[var2] != x+1)]
# df[(condition_1) & (condition_2) &...]

最新更新