繁体   English   中英

熊猫自条件以来的行数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM