如何在Pandas数据框行中找到最后一个索引,并使用列信息向后计数?

时间:2019-01-19 14:09:48

标签: python pandas python-2.7

例如:

如果我有这样的数据框:

      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

1 个答案:

答案 0 :(得分:0)

您可以尝试对数据帧进行转置,然后仅计算非空值并最后设置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