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)
这是一种使用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)