自条件以来的熊猫行数

时间:2019-01-28 12:04:47

标签: python pandas

我有一个以日期为索引的熊猫数据框

    col
d1  1
d2  0
d3  5
d4  6
d7  0

我想查找所有大于0的值,然后将其替换为自上一个大于0以来的天数(或行数)。

因此在这种情况下,列将为

    col
d1  NaN
d2  0
d3  2
d4  1
d7  0

有人能看到一个很好的方法吗?

1 个答案:

答案 0 :(得分:2)

我相信您需要在0GroupBy.cumcount之间进行计数:

m = df['col'].ne(0)
s = df.groupby(m.ne(m.shift()).cumsum()).cumcount(ascending=False).add(1)
df['new'] = np.where(m, s, 0)
print (df)
    col  new
d1    1    1
d2    0    0
d3    5    2
d4    6    1
d7    0    0

如有必要,将NaN设置为第一个0之前的值:

df.iloc[:(~m.values).argmax(), df.columns.get_loc('new')] = np.nan
print (df)
    col  new
d1    1  NaN
d2    0  0.0
d3    5  2.0
d4    6  1.0
d7    0  0.0