Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 返回panda df中的最后一个非零值_Python_Pandas - Fatal编程技术网

Python 返回panda df中的最后一个非零值

Python 返回panda df中的最后一个非零值,python,pandas,Python,Pandas,我有一个数据帧 col0 col1 col2 col3 col4 0 1 3 6 6 0 1 0 2 8 7 3 2 0 0 4 3 4 3 4 2 2 0 4 逻辑是如果col1不为零,则返回col1。如果列1为零,则返回列2(非零)。如果col 2为零,则返回col3。我们不需要为col4做任何事 我的代码如下所示,但它只返回col1 def test(df): if df['col1'].iloc

我有一个数据帧

    col0 col1   col2 col3 col4
0   1   3   6  6  0
1   0   2   8  7  3
2   0   0   4  3  4
3   4   2   2  0  4
逻辑是如果col1不为零,则返回col1。如果列1为零,则返回列2(非零)。如果col 2为零,则返回col3。我们不需要为col4做任何事

我的代码如下所示,但它只返回col1

def test(df):
        if df['col1'].iloc[0] > 0:
            return df['col1']
        elif df['col1'].iloc[0] == 0 & df['col2'].iloc[0] > 0:
            return df['col2']
        elif df['col2'].iloc[0]  == 0 & df['col3'].iloc[0]  > 0:
            return df['col3']
        else:
            return 0
test(new)

我试过了.any()和.all(),它也不起作用。另外,还有什么方法可以使这段代码更高效吗?

是@ALollz idea的一个变体,因为它在pandas 1.2.0中被弃用:

indices = np.argmax(df.ne(0).values, axis=1)
print(df.values[np.arange(len(df)), indices])
输出

[1 2 4 4]
更新

要排除最后一列并返回0,请改为执行以下操作:

indices = np.argmax(df.ne(0).iloc[:, :-1].values, axis=1)
result = np.where(df.ne(0).iloc[:, :-1].any(1), df.values[np.arange(len(df)), indices], 0)
print(result)

对不起,我的不好,这应该有一个列4,我们不使用。在这种情况下,len(df)可能无法工作。还有别的办法解决这个问题吗。我更新了question@codelearner0504我不明白,len(df)给出了行数。这也适用于新输入