[英]Pandas Number of Row Since Condition
我有一个以日期为索引的熊猫数据框
col
d1 1
d2 0
d3 5
d4 6
d7 0
我想找到所有大于 0 的值,然后用自上一个大于 0 的值以来的天数(或行数)替换该值。
所以在这种情况下,列将是
col
d1 NaN
d2 0
d3 2
d4 1
d7 0
任何人都可以看到这样做的好方法吗?
我相信您需要使用GroupBy.cumcount
0
之间的计数值:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.