【问题标题】:How to find last index in Pandas Data Frame row and count backwards using column information?如何在 Pandas Data Frame 行中查找最后一个索引并使用列信息倒数?
【发布时间】:2019-01-19 14:09:48
【问题描述】:
例如:
如果我有这样的数据框:
20 40 60 80 100 120 140
1 1 1 1 NaN NaN NaN NaN
2 1 1 1 1 1 NaN NaN
3 1 1 1 1 NaN NaN NaN
4 1 1 NaN NaN 1 1 1
如何找到每行中的最后一个索引,然后计算经过的列的差异,以便得到类似的结果?
20 40 60 80 100 120 140
1 40 20 0 NaN NaN NaN NaN
2 80 60 40 20 0 NaN NaN
3 60 40 20 0 NaN NaN NaN
4 20 0 NaN NaN 40 20 0
【问题讨论】:
标签:
python
pandas
python-2.7
【解决方案1】:
您可以尝试转置数据帧,然后只计算非空值和最后设置 1
#bit of complex procedure, solution involving with.
def fill_values(df):
df = df[::-1]
a = df == 1
b = a.cumsum()
#Function in counting the cummulative not null values
arr = np.where(a, b-b.mask(a).ffill().fillna(0).astype(int), 1)
return (b-b.mask(a).ffill().fillna(0).astype(int))[::-1]*20
df.apply(fill_values,1).replace(0,np.nan)-20
输出:
20 40 60 80 100 120 140
1 40.0 20.0 0.0 NaN NaN NaN NaN
2 80.0 60.0 40.0 20.0 0.0 NaN NaN
3 60.0 40.0 20.0 0.0 NaN NaN NaN
4 20.0 0.0 NaN NaN 40.0 20.0 0.0