我有一个df列(A,B,C,D,F)。我想要: 1)比较连续的行 2)如果连续E <= 1之间的绝对差和连续C> 7之间的绝对差,则删除C值最低的行。 样本数据:
A B C D E
0 94.5 4.3 26.0 79.0 NaN
1 34.0 8.8 23.0 58.0 54.5
2 54.2 5.4 25.5 9.91 50.2
3 42.2 3.5 26.0 4.91 5.1
4 98.0 8.2 13.0 193.7 5.5
5 20.5 9.6 17.0 157.3 5.3
6 32.9 5.4 24.5 45.9 79.8
所需结果:
A B C D E
0 94.5 4.3 26.0 79.0 NaN
1 34.0 8.8 23.0 58.0 54.5
2 54.2 5.4 25.5 9.91 50.2
3 42.2 3.5 26.0 4.91 5.01
4 32.9 5.4 24.5 45.9 79.8
与第3行相比,第4行已删除。第5行现在为第4行,与第3行相比,它已删除。
此代码以布尔值(不带值的df)返回结果,并且不满足所有条件。
df = (abs(df.E.diff(-1)) <=1 & (abs(df.C.diff(-1)) >7.)
代码结果:
0 False
1 False
2 False
3 True
4 False
5 False
6 False
dtype: bool
任何帮助表示赞赏。
答案 0 :(得分:1)
使用shift()比较行,并使用while循环进行迭代,直到没有新的更改发生为止:
while(True):
rows = len(df)
df = df[~((abs(df.E - df.E.shift(1)) <= 1)&(abs(df.C - df.C.shift(1)) > 7))]
df.reset_index(inplace = True, drop = True)
if (rows == len(df)):
break
它产生所需的输出:
A B C D E
0 94.5 4.3 26.0 79.00 NaN
1 34.0 8.8 23.0 58.00 54.5
2 54.2 5.4 25.5 9.91 50.2
3 42.2 3.5 26.0 4.91 5.1
4 32.9 5.4 24.5 45.90 79.8