我有以下 df。其中我想看到最后一个结果数字之后的第一个负数。&在“最后一个负数”列中“这应该出现,或者更确切地说是任何突出显示该行的内容。“这应该出现在最后一个结果数字之后的第一个负数上(结果数字可以是正数或负数&“这应该只出现在负数大米数字上,而不是正数大米数字上)。
import pandas as pd
import numpy as np
df1=pd.DataFrame({
"rice": [49235.6,-49234.5,-49230.05,-49190.2,49193.1,-49140.95,-49125.3],
"outcome": [-68.8499999999985,np.nan,np.nan,np.nan,-41.4000000000014,np.nan,np.nan,],
"first negative from last ": [np.nan,np.nan,np.nan,np.nan,np.nan,"this",np.nan],
})
我试图使用
df.shit()
但不确定如何提出条件。
为了更好地理解,以下 2 df 准确显示了“this”将出现在哪一行。
df2=pd.DataFrame({
"rice": [49235.6,-49234.5,-49230.05,-49190.2,49193.1,49140.95,-49125.3],
"outcome": [-68.8499999999985,np.nan,np.nan,np.nan,56,np.nan,np.nan,],
"first negative from last ": [np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,"this"],
})
df3=pd.DataFrame({
"rice": [49235.6,49234.5,-49230.05,-49190.2,-49193.1,-49140.95,-49125.3],
"outcome": [6.8499999999985,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,],
"first negative from last ": [np.nan,np.nan,"this",np.nan,np.nan,np.nan,np.nan],
})
代码
df1:
您可以构建掩码来识别感兴趣的区域(在最后一个非 NA 和负数之后),然后使用以下命令获取第一个匹配项(如果有)
idxmax
:或者,使用
shift
:输出:
中间体(第一种方法):
中间体(第二种方法):