如何找到数据帧每一列中最后出现的非零元素?
输入
A B
0 0 1
1 0 2
2 9 0
3 10 0
4 0 0
5 0 0
输出
A B
0 10 2
答案 0 :(得分:11)
您可以将0
转换为缺失值,使用正向填充并通过索引选择最后一行,最后将其转换为整数:
df = df.mask(df==0).ffill().iloc[[-1]].astype(int)
print (df)
A B
5 10 2
答案 1 :(得分: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)
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
更新
为了找到 last 非零值:
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)
答案 2 :(得分:2)
类似的东西:
results = {}
for column in df.columns:
results[column] = df.loc[df[column]!=0, column].iloc[-1]
这将创建一个字典,其中所有列均作为键,并且它们最后的非零值作为值。
编辑: 如果您希望在数据框中添加它,则需要对单行代码进行dict理解:
results = pd.DataFrame({column:[df.loc[df[column]!=0, column].iloc[-1]] for column in df.columns})
答案 3 :(得分:2)
在列上然后在行上循环并存储最后一个非零变量
list = []* number_of_columns
for i in range(len(df)):
dfcolumn = df[:,i]
for item in dfcolumn:
if item != 0:
list[i] = [i, item]
print(list)
答案 4 :(得分:0)
给出
import itertools as it
import pandas as pd
df = pd.DataFrame(
{"A": [0, 0, 9, 10, 0, 0],
"B": [1, 2, 0, 0, 0, 0]}
)
代码
#3 2 1
[next(it.dropwhile(lambda x: x == 0, reversed(col))) for _, col in df.iteritems()]
输出
[10, 2]
详细信息
对于DataFrame中的每一列,我们想要
[0, 0, 10, 9, 0, 0]
[10, 9, 0, 0]
10