pandas 比较上一行和下一行的值;使用符合条件的行创建新DF

vaqhlq81  于 2022-12-02  发布在  其他
关注(0)|答案(1)|浏览(287)

我试图在一列中比较浮点值;我需要一个不会产生错误的函数...
函数e应循环遍历列,并将列中的每个值与前一个值以及下一个值进行比较,然后创建一个所有行都符合条件的新DF。
我尝试了for循环和if语句的组合,但我无法找出不产生错误的代码。

范例:

如果col 1的值高于col 1的前一个值并且同时低于下一个值,则条件=真; all within col 1如果col 1的值低于col 1的前一个值,同时又高于下一个值,则条件也为真
第一个和最后一个值将产生错误,因此应该将它们分别与名为compare_first和compare_last的变量进行比较,我将手动定义这两个变量

values = [[5.5, 2.5, 10.0], [2.0, 4.5, 1.0], [2.5, 5.2, 8.0],
               [4.5, 5.8, 4.8], [4.6, 6.3, 9.6], [4.1, 6.4, 9.0],
               [5.1, 2.3, 11.1]]

# creating a pandas dataframe
a_df = pd.DataFrame(values, columns=['col1', 'col2', 'col3'],
                  index=['a', 'b', 'c', 'd', 'e', 'f', 'g'])
print(a_df)

输出功率

col1  col2  col3
a   5.5   2.5  10.0
b   2.0   4.5   1.0
c   2.5   5.2   8.0
d   4.5   5.8   4.8
e   4.6   6.3   9.6
f   4.1   6.4   9.0
g   5.1   2.3  11.1

所需的输出-将符合所述条件的所有行作为新df

col1  col2  col3
b   2.0   4.5   1.0
e   4.6   6.3   9.6
f   4.1   6.4   9.0
qpgpyjmq

qpgpyjmq1#

将较大的上一个或下一个值的移位值与DataFrame.shift进行比较,并按&AND进行链掩码,最后使用DataFrame.any测试每行至少有一个True(匹配):

df = a_df[(a_df.gt(a_df.shift()) & a_df.gt(a_df.shift(-1))).any(axis=1)]
print (df)
   col1  col2  col3
c   2.5   5.2   8.0
e   4.6   6.3   9.6
f   4.1   6.4   9.0

解自评论,谢谢@mozway:

df = a_df[(a_df.diff().gt(0) & a_df.diff(-1).gt(0)).any(axis=1)]
print (df)

相关问题