我有一个以日期为索引的熊猫数据框
col
d1 1
d2 0
d3 5
d4 6
d7 0
我想查找所有大于0的值,然后将其替换为自上一个大于0以来的天数(或行数)。
因此在这种情况下,列将为
col
d1 NaN
d2 0
d3 2
d4 1
d7 0
有人能看到一个很好的方法吗?
答案 0 :(得分:2)
我相信您需要在0
与GroupBy.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