我有一個資料框,其中包含每 0.1 秒的名稱和速度測量值。我想計算速度超過速度限制 0.3 秒(即連續 3 行)的次數。
limit = 25.3
Name speed time
Mary 25.6 0.1
Mary 25.8 0.2
Mary 25.1 0.3
Mary 24.4 0.4
Mary 24.2 0.5
Mary 25.8 0.6
Mary 25.9 0.7
Mary 25.8 0.8
Mary 25.4 0.9
Mary 24.9 1.0
Mary 25.6 1.1
Mary 25.8 1.2
Mary 26.2 1.3
結果
{Mary: 2}
uj5u.com熱心網友回復:
第一個想法是按連續值創建組,并按每個 grsoups 和聚合計數創建組Name,如果大于或等于,則過濾,limit然后再次按Names計數:
limit = 25.3
m = df['speed'].gt(limit)
s = df.groupby([(~m).shift().bfill()[m].cumsum(),'Name']).size()
s = s[s.ge(3)].groupby(level=1).size()
print (s)
Mary 2
dtype: int64
或者創建連續值的計數器,過濾等于3和計數Series.value_counts:
limit = 25.3
m = df['speed'].gt(limit)
#https://stackoverflow.com/a/52718619/2901002
b = m.cumsum()
c = b.sub(b.mask(m).ffill().fillna(0)).astype(int)
df['count'] = c
print (df)
s = df.loc[df['count'].eq(3), 'Name'].value_counts()
print (s)
Mary 2
Name: Name, dtype: int64
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/311000.html
上一篇:將負整數附加到串列Python中
