如何在整个数据帧的每一列中找到最后一个非零元素?

dee*_*af 10 python dataframe pandas

如何才能找到数据帧每一列中最后出现的非零元素?

输入项

    A  B
0   0  1
1   0  2
2   9  0
3  10  0
4   0  0
5   0  0
Run Code Online (Sandbox Code Playgroud)

输出量

    A  B
0  10  2
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 11

您可以转换0为缺失值,使用正向填充并通过索引选择最后一行,最后强制转换为整数:

df = df.mask(df==0).ffill().iloc[[-1]].astype(int)
print (df)
    A  B
5  10  2
Run Code Online (Sandbox Code Playgroud)


yat*_*atu 7

这是一种使用ndarray.argmax高级索引的方法:

first_max = df.values[df.ne(0).values.argmax(0), range(df.shape[1])]
out = pd.DataFrame([first_max], columns=df.columns)
Run Code Online (Sandbox Code Playgroud)
df = pd.DataFrame({'A': [0,0,0,10,0,0] , 'B': [0,2,0,0,0,0]})

first_max = df.values[df.ne(0).values.argmax(0), range(df.shape[1])]
# array([10,  2])
pd.DataFrame([first_max], columns=df.columns)

    A  B
0  10  2
Run Code Online (Sandbox Code Playgroud)

更新资料

为了找到最后一个非零值:

row_ix = df.shape[0]-df.ne(0).values[::-1].argmax(0)-1
first_max = df.values[row_ix, range(df.shape[1])]
out = pd.DataFrame([first_max], columns=df.columns)
Run Code Online (Sandbox Code Playgroud)